为什么 -fPIC 必须作为定义提供,而不是编译器标志



在我的CmakeLists.txt文件中,我有以下行

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall")

有了这个,我遇到了错误

"You must build your code with position independent code if Qt was built with -reduce-relocations. " "Compile your code with -fPIC (-fPIE is not enough)."

然后我不小心找到了主题

在 cmake 中编译 QT 项目时出错

建议添加该行的地方

add_definitions(-fPIC)

真的,它似乎有效。我有两个问题:

1./定义PIC的第一种形式有问题吗?(或者,为什么它们有不同的效果?

2./我从旧项目中"重新处理"了那条线,在那里它工作得很好。可以改变什么?

add_definitions(-fPIC)行是错误的。首先,它应该是add_compile_options.然后,add_definition是您应该避免的目录命令。

CMake 必须检测到宏名称以-f开头,并将其添加为编译器选项。

你真正想要的是告诉 CMake 目标应该编译为与位置无关的代码。

set_target_properties(your-executable PROPERTIES
POSITION_INDEPENDENT_CODE ON
)

这应该可以解决问题,并且与编译器无关。

最新更新