Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么GCC--gc部分和-ffunction部分不工作?(cmake构建)_C++_C_Gcc_Cmake_Ld - Fatal编程技术网

C++ 为什么GCC--gc部分和-ffunction部分不工作?(cmake构建)

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部分选项的组合

我想知道为什么GCC编译器标志-ffunction部分和链接器标志-gc部分不能消除不必要的响应。最终可执行文件中未引用的符号/函数代码。 为什么它不能像GCC文档中预期和描述的那样工作

也许我监督了一些非故意的参考
检查已使用此非常好的方法: 在链接器脚本中使用/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设置为新)