c++ - 如何解决此 VC++ 6.0 链接器错误?

标签 c++ windows visual-c++-6 linker-errors unresolved-external

这是一个 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/

相关文章:

c++ - 使用 const int 作为数组大小

c - 如何在 MSVC++6 中声明 'ilogbf' 等 IEEE 数学函数?

c# - C++加密,C#解密=失败

c++ - 有没有办法找出代码中编译器的版本?

c/windows : opening all . 目录中的 txt 文件

java - 执行 MVN 安装时出现未知主机错误

c - GetSaveFileName()如何更新 "File name:"控件中的文件扩展名?

c++ - 修改修饰名 - VS6.0 到 VS2005 迁移

c++ - 这个模板代码有什么问题?

c++ - LoadImage() (Windows) 找不到文件错误