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

时间:2019-08-13 19:06:49

标签: cmake qt5

在我的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)."

那我偶然发现了话题

Error while compiling QT project in cmake

建议在其中添加行

add_definitions(-fPIC)

实际上,它似乎可行。我有两个问题:

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

2. /我从较旧的项目中“重新处理”了该行,在那儿工作得很好。有什么可以改变的?

1 个答案:

答案 0 :(得分:2)

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

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

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

set_target_properties(your-executable PROPERTIES
    POSITION_INDEPENDENT_CODE ON
)

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