c++ - Visual Studio C++ - 检查链接特定库的原因

标签 c++ visual-studio-2012 linker

vs报错如:

  1. 找不到xxx.lib
    我如何检查为什么 vs 需要链接 xxx.lib?有跟踪日志吗?我的项目没有使用boost.regex,但是vs报错说找不到regex.lib。所以我想找出哪部分代码引用了正则表达式

  2. LNK 错误:LIBCMT.lib: xxx 已在 LIBCMTD.lib 中定义
    我如何检查为什么 vs 也链接 yyy.lib 即使这是一个调试版本?我有 2 个项目,它们链接到相同的库,所有库和项目本身都是/MTd。但是其中一个会报上面的错误,我认为它不应该链接 LIBCMT.lib 因为它是一个发布版本的 lib,而另一个项目是可以的所以 lib 文件是正确构建的

VS 可以显示链接轨迹吗?

最佳答案

1) 让我们从链接器实际上如何知道要链接的内容开始。基本上有 2 类:

  • 在链接器选项的项目设置中指定的库作为附加输入
  • 使用预编译器指令 #pragma comment 在代码中添加的库(通常与上面相同,但人们的口味不同)

否则,您只会获得有关缺失符号的信息,而不是它们来自的实际库。您可以做的是在 visual studio 链接器选项下将 Show Progress 设置为 For Libraries Searched (或只是 /VERBOSE:LIB 链接器标志) ,这实际上会向您展示在加载每个库后添加了哪些依赖项,这也有助于第 2 点)查看哪个库加载了哪个运行时。

2) 已经在 1) 中提到,您可以让链接器显示库加载进度,否则如果在您链接的外部库中使用动态 C 运行时,您可以使用 Dependency Walker检查库的依赖关系,并通过 dll 名称中的 'd' 后缀查找所需的 C 运行时 dll 是否已调试或发布。如果库已经与静态运行时链接,那么我想只有链接器错误会警告您。但我认为大多数严肃的库都是正确打包和结构化的,这样你就可以分辨出哪些文件包含调试版本,哪些是发布版本。如果图书馆只有发行版,那就另当别论了。但我的意思是,您仍然可以重新配置项目的 Debug 配置,以实际链接到发布运行时以满足外部库的要求,当然这会阻止一些调试功能、调试堆等。

关于c++ - Visual Studio C++ - 检查链接特定库的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19026975/

相关文章:

c++ - 复制到 d3dtexture 的 FreeType2 字符显示为双字母

c++ - 在谷歌模拟中返回对 unique_ptr 的引用

visual-studio-2012 - Visual Studio 2012 Windows 服务 .vdproj 项目迁移

visual-studio-2012 - VS 2012 构建 Hello World : "The operation could not be completed. The parameter is incorrect" 时出错

entity-framework-4.3 - 对EDMX文件进行水合处理时遇到错误?

ios - Apple Mach-O 链接器与第三方 SDK 发生错误

c++ - 是否可以在 Linux 上编译 VST?

python - 在 OSX 10.10 上链接 Boost Python

objective-c - 使用 Clang (Ubuntu) 编译 Objective C 时的问题

java - 在示例程序中找不到 JNI_OnLoad_libname