我一定缺少一些琐碎的东西。我想声明一个要导出的类-只是模块中几个类中的一个。在同一库中的任何地方都没有使用它,因此链接器将其删除。赋予所有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/