这是一个 Windows 控制台应用程序(实际上是一个服务),一个人在 4 年前构建并安装并运行。我现在需要进行一些更改,但甚至无法构建当前版本!这是构建输出:
--------------------Configuration: MyApp - Win32 Debug--------------------
Compiling resources...
Compiling...
Main.cpp
winsock.cpp
Linking...
LINK : warning LNK4098: defaultlib "LIBCMTD" conflicts with use of other libs; use /NODEFAULTLIB:library
Main.obj : error LNK2001: unresolved external symbol _socket_dontblock
Debug/MyApp.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
MyApp.exe - 2 error(s), 1 warning(s)
--------------------------------------------------------------------------
如果我使用 /NODEFAULTLIB
,那么我会收到大量错误。该代码实际上并没有使用 _socket_noblock
但我在网上找不到任何关于它的内容。大概它被我链接到的某个库使用,但我不知道它在哪个库中。
--- 阿利斯泰尔。
最佳答案
LNK4098 可能不是问题。例如,如果您链接到某些使用静态运行时链接的库的发布版本并导致 LIBCMT(注意缺少“D”后缀)被添加到默认库,则可能会发生这种情况。您的应用程序在调试配置中构建,使用 LIBCMTD,因此发生了冲突。它可能实际上是安全的,前提是您不与该库交换任何依赖于运行时的内容。
至于_socket_noblock
,您可以使用一些搜索工具(例如grep 或find)在.obj 和.lib 文件中搜索此字符串。通过这种方式,您将知道哪个库引用了该符号,这可能是发现该库具有哪些依赖项的起点。
关于c++ - 如何解决此 VC++ 6.0 链接器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/330500/