Подтвердить что ты не робот

"LIBCMT" конфликтует с использованием других libs + неразрешенных внешних символов

У меня есть программа, использующая OpenGL 3.2 (+ libs) и FreeType2. Затем другая программа с Boost и OpenSSL. Сторона OpenGL должна была удостовериться, что текст можно отобразить, а программа boost/openssl - сделать безопасный сервер входа/игры.

Обе программы отлично работают с ними.

Однако добавление Boost и OpenSSL в проект (GL + freetype) заставило его не подключиться.

Я связал следующие библиотеки, а также включил туда папку.

glimg.lib glutil.lib glfw.lib opengl32.lib freetype.lib glew32.lib user32.lib libeay32.lib ssleay32.lib

Ошибка компоновщика.

1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>libeay32.lib(cryptlib.obj) : error LNK2001: unresolved external symbol [email protected]
1>libeay32.lib(cryptlib.obj) : error LNK2001: unresolved external symbol [email protected]
1>libeay32.lib(cryptlib.obj) : error LNK2001: unresolved external symbol [email protected]
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected]
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected]
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected]
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected]
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected]
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected]
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected]
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected]
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected]
1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol [email protected]
1>.\BasicTexture.exe : fatal error LNK1120: 13 unresolved externals

Библиотека времени выполнения установлена ​​в многопоточную DLL (/MD)

Я не знаю, что делать, я бы очень признателен за любую помощь.

4b9b3361

Ответ 1

Неразрешенные внешние сообщения об ошибках создаются, когда компилятор генерирует код, ссылающийся на объекты или функции, определенные извне, и компоновщик не находит их. Чтобы сгенерировать код, вызывающий вызов функции, компилятору требуется только объявление:

extern "C" BOOL DeregisterEventSource ( HANDLE hEventLog );

Это достаточно информации для создания инструкции call (кроме целевого адреса). Ключевое слово extern сообщает компилятору, что реализация определена в другом месте. Следовательно, он не может знать адрес цели, который должен быть заполнен позже. Когда компилятор завершен, это задание компоновщика для соединения частей вместе. Он использует информацию, собранную из библиотек импорта, для поиска необходимых смещений.

Вызовы Windows API легко обнаруживаются в журнале ошибок. Они имеют префикс __imp__, а иногда и посттекст A или W, а затем @<n> где <n> указывает количество байтов, необходимое для аргументов. В случае вызова Windows API вы можете найти функцию в MSDN (например, DeregisterEventSource). Внизу приведены требования, в которых вы можете найти имя библиотеки импорта.

Предупреждение о конфликте указывает, что не все модули используют одну и ту же библиотеку времени выполнения. Несмотря на то, что это всего лишь предупреждение, это серьезная проблема и ее необходимо решить. Вы получаете это предупреждение, если вы смешиваете компиляторы /MD и /MT, но также, если вы смешиваете библиотеки выпуска и отладки времени выполнения (например, /MD и /MDd). Чтобы диагностировать это сообщение, вы можете использовать компоновщик /VERBOSE:LIB, чтобы определить, какие библиотеки ищет линкер. Дополнительную информацию об этом предупреждении можно найти на этой ссылке MSDN.

Ответ 2

Вы пытаетесь скомпилировать с /MD, что, вероятно, является правильным выбором, но какой-то код (возможно, одна из библиотек) был построен с помощью /MT, и вы не можете иметь его в обоих направлениях в одной и той же программе, Вам нужно выяснить, какая библиотека была построена с помощью /MT и перестроить ее с помощью /MD.