我有一个使用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 __imp__DeregisterEventSource@4 1>libeay32.lib(cryptlib.obj) : error LNK2001: unresolved external symbol __imp__ReportEventA@36 1>libeay32.lib(cryptlib.obj) : error LNK2001: unresolved external symbol __imp__RegisterEventSourceA@8 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__DeleteDC@4 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__DeleteObject@4 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__GetBitmapBits@12 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__BitBlt@36 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__GetObjectA@12 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__SelectObject@8 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__CreateCompatibleBitmap@12 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__GetDeviceCaps@8 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__CreateCompatibleDC@4 1>libeay32.lib(rand_win.obj) : error LNK2001: unresolved external symbol __imp__CreateDCA@16 1>.\BasicTexture.exe : fatal error LNK1120: 13 unresolved externals
运行时库设置为多线程DLL(/ MD)
我不知道该怎么办我真的很感激任何帮助.
解决方法
当编译器生成引用外部定义的对象或函数的代码时,会产生未解决的外部错误消息,并且链接器无法找到这些对象.为了生成调用函数的代码,编译器只需要一个声明:
extern "C" BOOL DeregisterEventSource ( HANDLE hEventLog );
这是足够的信息来产生一个调用指令(目标地址除外). extern关键字通知编译器该实现在别处定义.因此,它不能知道以后必须填写的目标地址.当编译器完成后,链接器的工作就是将这些部分连接在一起.它使用从导入库收集的信息查找所需的偏移量.
Windows API调用很容易被发现在错误日志中.他们有一个__imp__前缀,有时候是一个A或W后缀,后跟@< n>其中< n>指示参数所需的字节数.在Windows API调用的情况下,您可以查看MSDN中的功能(如DeregisterEventSource).最底层的是要求,您可以在其中找到导入库名称.
冲突警告表示并非所有模块都使用相同的运行时库.即使这只是一个警告,这是一个严重的问题,应该解决.如果您混合使用/ MD和/ MT编译器开关,并且如果混合发行和调试运行时库(如/ MD和/ MDd),则会收到此警告.要诊断此消息,您可以使用/VERBOSE:LIB
链接器开关来确定链接器正在搜索哪些库.有关此警告的更多信息,请参见MSDN link.