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

标签 c++ shared-libraries static-libraries eclipse-cdt

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

C/C++ Build -> Cross C++ Linker -> Libraries

但是我得到了错误:

relocation R_X86_64_32S against symbol ... can not be used when making a shared object.

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

最佳答案

问题很可能是因为静态库是在不支持position independent code 的情况下编译的。 .我不知道如何在不重新编译静态库的情况下修复它。

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

没有更多信息,很难提供更多建议。如果你能提供一个minimal, reproducible example , 那么我可以帮助你。

关于c++ - CDT 使用 lib*.a --- 对符号重定位 R_X86_64_32S ... 不能使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45691778/

相关文章:

c - 跨进程共享库

g++ - 如何告诉 c++ 链接器某些类稍后将由 dlopen 添加

c++ - g++ : In what order should static and dynamic libraries be linked?

iOS 制作通用库 - 适用于 i386 和 arm7

ios - 使用 Swift 和 xCode9 beta4 创建静态库

C++ std::array 警告

c++ - 如何访问 C++ 字符矩阵的一行?

c++ - 在函数类中使用 push_back 更新指针 vector 的大小

c++ - 实例化结构模板时出现问题

C++ - 基本的 WinAPI 问题