用GCC导出C ++类的符号

Vor*_*ico 5 c++ gcc

我正在使用dlopen合并动态加载的库及其主机的符号,并且在主机中我有一个类:

class Foo {
public:
    Foo() {/* ... */}
    void bar() {/* ... */}
};

int main() {
    // Foo foo;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用进行编译,g++ -Wl,--export-dynamic -o test test.cpp并使用来检查符号nm -g test。我希望的符号_ZN3FooC1Ev,并_ZN3FooC2Ev在执行中存在,因为动态库需要他们,但他们不会出现,除非我被取消注释上面的行中使用它们。我认为它已经过优化,因为GCC认为不需要它。

如何强制将Foo的构造函数和方法包含在宿主二进制文件中?

Jea*_*nès 3

如果您至少不定义对象,则具有内联方法定义的类定义不会生成任何符号。因此,如果您想确保它们的可见性,请不要将方法定义为内联......