c++ - 是否有自动程序来查找 C++ 链接器错误?

标签 c++ build-process static-analysis linker-errors

我在使用 C++ 的 Linux 环境中工作,使用 GCC 编译器。

我目前正在修改和升级大量预先存在的代码。作为其中的一部分,有必要在整个代码的各个地方添加相当多的小引用以将事物链接在一起,还需要添加几个新的外部代码库。还有一个相当大且复杂的 Makefile 结构链接到一个 configure.ac 文件来处理构建过程。

在开始构建过程时,一切都可以毫无问题地编译,但是当尝试使用我们创建的新添加的自定义代码库时,会返回可怕的链接器错误。我们现在已经通过细齿梳理了大量代码来寻找拼写不匹配,检查所有库包含在构建过​​程中的顺序,并使用转储检查创建的 .o 文件是否包含我们需要的内容,以及一切都在他们应该在的地方。我们也单独测试了这个库,问题肯定不在那里。

简而言之,我们已经尝试了您在这些情况下通常应该做的大部分事情。

是否有一种 C++ 工具可以自动检测链接器错误,类似于 cppcheck 或 splint(我们都运行过它们都无济于事),这可以帮助解决这个问题?

最佳答案

不知道你的平台,但我花了一些时间在 gcc 中解决链接器问题,直到我意识到静态库 ( .a ) 链接需要特定的顺序,这与链接 gcc object.o first.a second.a 不同。比gcc object.o second.a first.a .

关于c++ - 是否有自动程序来查找 C++ 链接器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1825094/

相关文章:

c++ - 为什么 boost::make_shared 使用复制语义

powershell - 如何合并和压缩多个脚本和CSS文件供生产使用?

java - 分解 Maven pom.xml 的公共(public)元素

C++ 代码 - Coverity(或其他一些静态代码分析器)+线程安全

c# - 检测使用/滥用 String.Concat 的工具(应该使用 StringBuilder 的地方)

c# - 对不使用 IDisposable 的框架组件使用 .NET 分析器规则 CA1001

javascript - asm.js Module.ccall/Module.cwrap 回调

c++ - 为什么用 Visual Studio 2013 而不是 g++-4.8.1 编译?

c++ - 将 RtMidi 对象传递给函数 (C++)

java - 用 Ant build : dynamic build options?