gpt4 book ai didi

c++ - 如何从共享库中删除 *ALL* 未使用的符号?

转载 作者:太空狗 更新时间:2023-10-29 20:26:52 27 4
gpt4 key购买 nike

我有一段代码需要编译为共享库并从中删除所有未使用的代码,但我找不到合适的解决方案。这是一个简单的例子:

// test.cpp, compiled with GCC -fPIC -shared -fvisibility=hidden
#include <stdio.h>
class Foo {
void bar();
};
void Foo::bar() { printf("hello"); } // unused and should be removed
// I'm using printf("hello") so I can detect the symbols with `strings`

__attribute__((visibility("default"))) void test() {} // this function is "used"

-fvisibility=hidden 使所有函数默认隐藏,我手动用 __attribute__((visibility("default"))) 标记公共(public)函数.但是,隐藏函数不会被删除,除非标记为 static(显然我不能对 C++ 方法执行此操作)。

无论我做什么,GCC 都会始终保留 void Foo::bar()hello。有没有办法在不破解编译器的情况下删除这些符号? (是的,我现在正在考虑!)

谢谢!

最佳答案

使用标记 -ffunction-sections 进行编译。然后用 -Wl,--gc-sections 链接。我认为这也可以通过 LTO 实现,我不确定细节。

请注意,dylib 中的所有公共(public)符号都被认为是事件的。这样只会去除隐藏的符号。

关于c++ - 如何从共享库中删除 *ALL* 未使用的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18115598/

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