2016-02-13 39 views
0

我无法显示代码(作为其专有)。我有一个文件调用其他地方定义的类的方法,所以我包含该类的头文件。我的IDE intellisense可以确定方法的位置。但是,在编译和安装二进制文件之后,当我运行该应用程序时,它崩溃引用上述类中缺少的符号。共享库不包含包含方法的符号?

我检查了库符号(使用nm),并且我缺少一个。

我的问题是,考虑到我已经包含标题,还有什么其他可能的事情可以解释为什么符号丢失?如果从另一个头部有一个相同的方法签名,那么这两个(而不是无)都将在共享库中列出吗?

问题是否与cmake没有连接第二个头?我怎么能检查这个?

回答

1

考虑到我已经包含标题,还有什么其他可能的事情可以解释为什么符号缺失?

包括标题是从来没有足以得到一个符号;你的必须也链接到其他类的对象文件(或库)。

问题是否与cmake问题,它没有链接第二个头?

你很困惑:头文件在连接中根本不起任何作用,只有目标文件和库都有。

您的困惑的一个可能的来源:Microsoft编译器支持神奇的#pragma comment(lib, "foo")。如果你在其中包含pragma的标题,然后将你的对象提供给链接器,它会方便地自动将foo.lib附加到你的链接行。

UNIX链接器通常没有这样的“黑魔法”,整个功能被认为是一些错误