【问题标题】:Shared library not containing symbol for included method? [closed]共享库不包含包含方法的符号? [关闭]
【发布时间】:2016-02-13 15:53:04
【问题描述】:

我无法显示代码(作为其专有)。我有一个文件调用在别处定义的类的方法,因此我包含了该类的标头。我的 IDE 智能感知可以确定方法所在的位置。但是,在编译和安装二进制文件后,当我运行应用程序时,它会崩溃,原因是上述类中的方法缺少符号。

我检查了库符号(使用 nm),我需要的那个不见了。

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

问题可能出在 cmake 上,它没有链接第二个标头吗?我怎么能检查这个?

【问题讨论】:

    标签: linux build cmake makefile shared-libraries


    【解决方案1】:

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

    包含标题从不足以获得符号;您必须还链接到其他类的目标文件(或库)。

    问题可能出在 cmake 上,它没有链接第二个标头吗?

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

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

    UNIX 链接器通常没有这种“黑魔法”,整个功能被某些人认为是 mis-功能。

    【讨论】:

      猜你喜欢
      • 2014-11-03
      • 2020-04-13
      • 2021-08-05
      • 2014-11-12
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      相关资源
      最近更新 更多