【问题标题】:How to build statically linked application with PIC enabled static libraries如何使用启用 PIC 的静态库构建静态链接应用程序
【发布时间】:2012-06-07 07:13:02
【问题描述】:

我有一个静态链接的应用程序 (sample.a),我想使用启用 PIC 的第三方库 (third-party-lib.a) 构建它。请注意,第三方库不是共享库。它是一个启用 PIC 的静态库。

谁能建议我如何做到这一点?

我尝试将我的库与第三方库链接,就像我们通常链接静态库一样,但它给了我一个错误:

/usr/lib/libc_nonshared.a(stack_chk_fail_local.oS):在函数__stack_chk_fail_local': (.text+0x10): undefined reference to__stack_chk_fail'中

提前致谢。

【问题讨论】:

    标签: unix libraries


    【解决方案1】:

    我建议使用 nm 来尝试查找所涉及的符号。好主意也是检查是否没有任何#define 你需要照顾或类似的。就其本身而言,启用 PIC 的静态库不应更改链接中的任何内容,只要您也使用 -fPIC 编译程序的其余部分。

    总而言之,在我看来,这不像是由 PIC 设置引起的。您是否曾经使用动态库构建过代码,现在才切换到静态库?这可以解释为什么缺少一些相关的配置。

    【讨论】:

    • 感谢您的快速回复。我们的代码不是用 -fPIC 编译的。只有我们尝试构建的第三方库启用了 -fPIC,但它不是共享对象。它是一个启用了 -fPIC 的静态库。您是否建议我们需要使用 -fPIC 编译我们的代码?这是唯一的方法吗?
    • 据我了解,您不需要使用 -fPIC 重新编译(因为静态库根本不应该设置地址),但我不确定使用的实际机制链接器。
    • 谢谢..如果您有任何其他信息,请告诉我..有人知道吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    相关资源
    最近更新 更多