gpt4 book ai didi

gcc - 为什么 "R_X86_64_32 can not be used when making a shared object"的 CMake 解决方案特定于 x86_64?

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

我在为我的新玩具编译一些插件时遇到了这个错误(在 Linux 上的 gcc/g++ 上):

relocation R_X86_64_32 can not be used when making a shared object; recompile with -fPIC



基本了解 why PIC is needed但是,在 CMake 系统中, solution seems to be this :
IF (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
SET_TARGET_PROPERTIES (${PLUGIN_BASE_LIB} PROPERTIES COMPILE_FLAGS "-fPIC")
ENDIF (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")

我不明白为什么这个解决方案是有条件的。

follow-up似乎建议 -fPIC 基本上应该在除 32 位 Linux 之外的任何地方使用,这表明上述内容不可移植。

我应该总是使用 -fPIC 吗?会不会有什么不良影响?
${PLUGIN_BASE_LIB}需要静态链接到主可执行文件和作为插件的各种共享库。

最佳答案

理想情况下,您希望构建两个版本的代码:一个用于主可执行文件,另一个用于库。第一个需要用 -fPIE 编译(这是现代发行版的默认设置),第二个是 -fPIC .正如您所指出的,这不取决于目标架构。

您只能使用 -fPIC 编译一个版本但随后主要的可执行文件将是次优的,因为 -fPIC强制编译器遵守符号插入规则,这显着限制了它优化代码的能力,例如内联和克隆函数。

关于gcc - 为什么 "R_X86_64_32 can not be used when making a shared object"的 CMake 解决方案特定于 x86_64?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24109948/

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