CDT 使用 lib\*.a --- 重定位 R_X86_64_32S 对符号 ... 不能使用

新手上路,请多包涵

我尝试在 CDT 中为我的 c++ 项目引用一个静态的 *.a 库。我把它包括在

C/C++ 构建 -> 跨 C++ 链接器 -> 库

但我得到了错误:

重定位 R_X86_64_32S 对符号 … 制作共享对象时不能使用。

现在从我目前所读的内容来看,我认为这意味着编译器认为我正在引用一个共享库,而它是一个静态库 - 是这样吗?如果是这样,现在可以做什么?有什么方法可以只使用 *.a 库还是我必须将它们重新编译为 .so 对象?

原文由 don-joe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 386
1 个回答

问题很可能是由于静态库是在不支持 位置无关代码 的情况下编译的。我不知道如何在不重新编译静态库的情况下修复它。

如果您可以重新编译静态库,那么假设您使用的是 gcc 或 clang,则必须将 -fPIC 标志添加到编译器标志中。

没有更多信息,很难给出更多建议。如果您可以提供一个 最小的、可重现的示例,那么我可以为您提供帮助。

原文由 János Benjamin Antal 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题