我想生成包含的标头的符号名称,而不调用任何函数。
例如,如果我有一个标头 mylib.hpp:
namespace ns {
class MyClass{
public:
void printHello();
};
}
在 use_mylib.cpp 中我只包含该标头:
#include "mylib.hpp"
如果我使用
g++ -c use_mylib.cpp -o symbols.o
进行编译,symbols.o 将不包含任何符号,因为没有调用任何函数。有没有办法让编译器声明它有一个损坏的 ns::MyClass::printHello() _ZN2ns7MyClass10printHelloEv
符号,即使它没有被调用?
我希望 g++ 中的开关能够在
symbols.o
中发出未调用的函数符号,但这没有任何意义,因为它们是未调用的函数。是否有一个用户可调用的工具来获取 .cpp 文件中所有损坏的名称,即使它们未被调用?
您可能会问我为什么要这样做。 我正在尝试生成共享库,并且只需编译源一次。我想发布仅定义了“公共”符号的库,但我也想针对我未发布的符号进行测试。 “一切公开,然后剥离符号”的方法。是我正在看的东西。理想情况下,我可以 #include 所有公共标头来生成所需的损坏的导出,这是目前流程中的长杆。
符号名称将位于具有函数定义的翻译单元 (.cpp) 文件中。标头只有声明,没有定义。
如果您只想公开可用的符号子集,则需要在构建公共版本时预先链接该库,但是在测试时,您应该能够针对正常构建的静态库进行测试并访问这些符号,因为所有由于目标文件尚未链接在一起,因此非静态符号将存在于静态库中。