我一定缺少一些琐碎的东西。我想声明一个要导出的类-只是模块中几个类中的一个。在同一库中的任何地方都没有使用它,因此链接器将其删除。赋予所有hidden可见性和导出的一个default并不能使链接程序混乱。

如果我告诉链接器--whole-archive,它会抱怨完全不相关的函数的多个定义。此外,我不想导出所有内容-仅导出一个类。

#pragma GCC visibility push(default)
class C { public: C() { } };
#pragma GCC visiblity pop

// with this line the class is exported
// without it — it does not
delete new C();
// the line does nothing useful,
// just references the constructor

最佳答案

事实证明,尽管可以指示CUDA的nvcc编译器使用gcc进行编译,但它仍会自行链接。而且它与gcc的方式不同。

关于c++ - 将导出的符号保留在共享库中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24247141/

10-16 20:29