C++ 为什么GCC--gc部分和-ffunction部分不工作?(cmake构建)
我想知道为什么GCC编译器标志-ffunction部分和链接器标志-gc部分不能消除不必要的响应。最终可执行文件中未引用的符号/函数代码。 为什么它不能像GCC文档中预期和描述的那样工作 也许我监督了一些非故意的参考C++ 为什么GCC--gc部分和-ffunction部分不工作?(cmake构建),c++,c,gcc,cmake,ld,C++,C,Gcc,Cmake,Ld,我想知道为什么GCC编译器标志-ffunction部分和链接器标志-gc部分不能消除不必要的响应。最终可执行文件中未引用的符号/函数代码。 为什么它不能像GCC文档中预期和描述的那样工作 也许我监督了一些非故意的参考 检查已使用此非常好的方法: 在链接器脚本中使用/DISCARD/in。没有成功。没有引用我的未使用函数 没有机会自动消除死代码!?为什么?答案很简单(就我而言): 我正在使用CMake构建我的项目,它正在插入标志-rdynamic 据我所知,-rdynamic和-gc部分选项的组合
检查已使用此非常好的方法: 在链接器脚本中使用/DISCARD/in。没有成功。没有引用我的未使用函数
没有机会自动消除死代码!?为什么?答案很简单(就我而言): 我正在使用CMake构建我的项目,它正在插入标志
-rdynamic
据我所知,
-rdynamic
和-gc部分
选项的组合在GCC文档中没有提到应该有这样一个警告:-rdynamic
呈现--gc节
无用的bc。所有符号均隐式引用。
另见:
当然,只有CMake用户受此影响。。。(不知情):
CMP0065
不添加标志以从没有
:prop\u tgt:启用导出
目标属性
出于历史原因,CMake 3.3及以下版本始终链接可执行文件
在一些带有标志的平台上,如-rdynamic
,可以从中导出符号
可执行文件供任何插件使用,这些插件可以通过dlopen
加载。
CMake 3.4及更高版本只对
显式标记为:prop\u tgt:ENABLE\u EXPORTS
target属性
此策略的OLD
行为是始终使用附加
链接可执行文件时的链接标志,而不管
:prop\u tgt:启用导出
目标属性
此策略的新行为是仅使用附加链接
如果:prop\u tgt:ENABLE\u EXPORTS
目标属性设置为True
此策略是在CMake 3.4版中引入的。不像大多数
策略,CMake版本|发布|在默认情况下不会发出警告
策略未设置,仅使用旧行为。请参阅
变量:CMAKE\u POLICY\u WARNING\u CMP0065
用于控制警告的变量
要消除大部分不必要的-rdynamic
CMakeLists.txt,只需添加cmake_策略(设置CMP0065 NEW)
答案非常简单(在我的例子中):
我正在使用CMake构建我的项目,它正在插入标志-rdynamic
据我所知,-rdynamic
和-gc部分
选项的组合在GCC文档中没有提到应该有这样一个警告:
-rdynamic
呈现--gc节
无用的bc。所有符号均隐式引用。
另见:
当然,只有CMake用户受此影响。。。(不知情):
CMP0065
不添加标志以从没有
:prop\u tgt:启用导出
目标属性
出于历史原因,CMake 3.3及以下版本始终链接可执行文件
在一些带有标志的平台上,如-rdynamic
,可以从中导出符号
可执行文件供任何插件使用,这些插件可以通过dlopen
加载。
CMake 3.4及更高版本只对
显式标记为:prop\u tgt:ENABLE\u EXPORTS
target属性
此策略的OLD
行为是始终使用附加
链接可执行文件时的链接标志,而不管
:prop\u tgt:启用导出
目标属性
此策略的新行为是仅使用附加链接
如果:prop\u tgt:ENABLE\u EXPORTS
目标属性设置为True
此策略是在CMake 3.4版中引入的。不像大多数
策略,CMake版本|发布|在默认情况下不会发出警告
策略未设置,仅使用旧行为。请参阅
变量:CMAKE\u POLICY\u WARNING\u CMP0065
用于控制警告的变量
要消除大部分不必要的-rdynamic
CMakeLists.txt,只需添加cmake_策略(将CMP0065设置为新)