我无法显示代码(作为其专有)。我有一个文件调用其他地方定义的类的方法,所以我包括该类的标头。我的IDE intellisense可以确定方法的位置。但是,在编译和安装二进制文件之后,当我运行应用程序时,它会崩溃,引用上述类中的方法缺少的符号。
我检查了库符号(使用nm),并且缺少了我需要的符号。
我的问题是,考虑到我已经包含了标题,其他可能的东西可以解释为什么符号丢失了?如果来自另一个头的方法签名相同,那么共享库中是否会列出(而不是没有)?
问题可能在于cmake没有链接第二个标题吗?我怎么能检查这个?
答案 0 :(得分:1)
考虑到我已经包含了标题,其他可能的东西可以解释为什么符号丢失了?
包含标题从不足以获得符号; 必须还链接到另一个类的目标文件(或库)中。
问题可能在于cmake没有链接第二个标题吗?
您感到困惑:标题在链接中根本不起任何作用,只有目标文件和库可以。
混淆的可能来源:Microsoft编译器支持神奇的#pragma comment(lib, "foo")
。如果您#include
包含此类pragma
的标头,然后将您的对象提供给链接器,它会方便地自动将foo.lib
附加到您的链接行。
UNIX连接器通常没有这种“黑魔法”,并且整个功能被一些人视为 mis - 特征。