And*_*rew 17 c++ linker-errors visual-studio-2010 unresolved-external linker-warning
我有一个使用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
Run Code Online (Sandbox Code Playgroud)
运行时库设置为多线程DLL(/ MD)
我不知道该怎么做我真的很感激任何帮助.
Adr*_*thy 24
您正试图编译/MD,这可能是正确的选择,但一些代码(可能是库之一)与建/MT,你不能把它在同一程序两种方式.您需要找出构建的库并使用/MT它重建它/MD.
IIn*_*ble 21
当编译器生成引用外部定义的对象或函数的代码并且链接器无法找到这些消息时,会生成未解决的外部错误消息.要生成调用函数调用的代码,编译器只需要声明:
extern "C" BOOL DeregisterEventSource ( HANDLE hEventLog );
Run Code Online (Sandbox Code Playgroud)
这是产生call指令的足够信息(目标地址除外).该extern关键字通知编译器实现是在别处定义的.因此,它无法知道以后必须填写的目标地址.编译完成后,链接器的工作就是将各个部分连接在一起.它使用从导入库收集的信息来查找所需的偏移量.
Windows API调用很容易在错误日志中发现.它们有一个__imp__前缀,有时是后缀A或W后缀,@<n>其中<n>表示参数所需的字节数.在Windows API调用的情况下,您可以在MSDN中查找该函数(如DeregisterEventSource).在底部是需求,您可以在其中找到导入库名称.
冲突警告表明并非所有模块都使用相同的运行时库.虽然这只是一个警告,但它是一个严重的问题,应该得到解决.如果混合/MD和/MT编译器开关,你会得到这个警告,但是,如果你混合发布和调试运行时库(比如/MD和/MDd).要诊断此消息,可以使用/VERBOSE:LIB链接器开关确定链接器正在搜索的库.有关此警告的其他信息,请访问此MSDN链接.
| 归档时间: |
|
| 查看次数: |
32140 次 |
| 最近记录: |