【发布时间】:2014-06-16 15:25:30
【问题描述】:
我一定遗漏了一些微不足道的东西。我想声明一个用于导出的类——只是模块中的一个。它不在同一个库中的任何地方使用,因此链接器将其剥离。提供所有 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
【问题讨论】:
-
不是 Linux 专家。但是从我参与的项目中,我知道您可以像使用 Windows DLL 一样使用共享库。语法有点不同,但以相同的导出宏结束。 Here你可以阅读它。
-
是的,在带有 Visual C++ 的 Windows 中,我可以简单地指定
__dllexport。 -
简而言之:用
-fvisibility=hidden编译然后自己构建导出宏,如我在第一条评论中链接的页面底部所示。 -
我在问题中提到它没有帮助。
-
我认为从 gnu 编译器 4.0 向上工作的所有内容。也许你犯了一些小错误——比如忘记了 -shared 链接器选项或类似的?
标签: c++ linux linker shared-libraries