2015-03-22 2 views
1

Я пытаюсь скомпилировать руководство по быстрому старту GLFW (Here) в Windows 8 с 64-битным использованием mingw. Я использую официальные 32-битные бинарные окна Windows с веб-сайта glfw.Неопределенная ссылка на `__ms_vsnprintf 'при связывании GLFW статически

Все работает нормально, когда я связываю библиотеку glfw динамически, связывая -lglfw3dll -lgdi32 -lopengl32 -lglew32 и определяя GLFW_DLL.

Когда я пытаюсь связать glfw статический, однако, я получаю undefined reference to '__ms_vsnprintf'

Моей команды, чтобы связать статический это mingw32-g++.exe -o bin\Release\test.exe obj\Release\main.o -s -lglfw3 -lgdi32 -lopengl32 -lglew32s с GLEW_STATIC определенно.

+0

Я прошел эту проблему, самостоятельно собрав библиотеки GLFW. Я все еще не знаю, почему это происходит. – NoviceCodingGeek

ответ

2

У меня такая же проблема, когда я попытался создать пример приложения для GLFW. Я переключил набор компиляторов с оригинального MinGW32 на MinGW-W64 и решил эту проблему. Я пришел с этой идеей после прочтения этого поста:

http://mingw-users.1079350.n2.nabble.com/missing-symbol-ms-vsnprintf-when-linking-with-cross-compiled-library-td7582798.html

Кажется, что ЛИЭС GLFW строится с MinGW64 или MinGW-w64.

1

MinGW\include\stdio.h:

/* The following pair ALWAYS refer to the MSVCRT implementations... 
*/ 
_CRTIMP int __cdecl __MINGW_NOTHROW _snprintf (char*, size_t, const char*, ...); 
_CRTIMP int __cdecl __MINGW_NOTHROW _vsnprintf (char*, size_t, const char*, __VALIST); 
_CRTIMP int __cdecl __MINGW_NOTHROW _vscprintf (const char*, __VALIST); 

Так просто использовать их с подчеркиванием перед ними.

Смежные вопросы