gpt4 book ai didi

c++ - 为什么在平台A编译的静态库不能在没有警告的情况下在平台B上使用?

转载 作者:行者123 更新时间:2023-12-04 14:58:02 25 4
gpt4 key购买 nike

对不起,我的英语很差。

我最近碰到了这个。

我有一个在 x86_64 CPU 上的 CentOS 7 上编译的静态库(比方说 jsoncpp)。我想在 x86_64 CPU 上的 Ubuntu 18 04 上使用 libjsoncpp.a

同事说只和CPU有关。但是当用静态库编译时,会弹出这些错误信息:

Compilation fails with “relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object”
...

有时就像“这是错误的 PIE 对象,用 -fPIE 重新编译它”。

我想知道的是,在平台B编译的程序中使用平台A编译的静态库时,有哪些因素在起作用。

这些因素仅仅是 glibc 版本和 CPU 架构吗?

如果有人能指出我的方向,我将不胜感激。

最佳答案

如果可执行文件是 PIC(由于 ASLR,现在这是默认设置),所有链接到它的 .o 文件(以及因此的 .a 文件)也必须构建 PIC。

关于c++ - 为什么在平台A编译的静态库不能在没有警告的情况下在平台B上使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67563236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com