不共享与共享库的所有类

像win32一样丑陋微软编译器是通过使用__declspecmacros,它确实具有明确你想要导出或不导出的好处。

现在将相同的代码移到Linux gnu / gcc系统上意味着所有的类都被导出!(?)

这是真的吗?

有没有办法不在gcc下的共享库中导出类?

#ifndef WIN32 #define __IMPEXP__ #else #undef __IMPEXP__ #ifdef __BUILDING_PULSETRACKER__ #define __IMPEXP__ __declspec(dllexport) #else #define __IMPEXP__ __declspec(dllimport) #endif // __BUILDING_PULSETRACKER__ #endif // _WIN32 class __IMPEXP__ MyClass { ... } 

Solutions Collecting From Web of "不共享与共享库的所有类"

这在GCC 4.0及更高版本中是可能的。 海湾合作委员会的人考虑这个知名度 。 GCC维基上有一篇关于这个主题的好文章 。 这篇文章摘录如下:

 #if defined _WIN32 || defined __CYGWIN__ #ifdef BUILDING_DLL #ifdef __GNUC__ #define DLL_PUBLIC __attribute__((dllexport)) #else #define DLL_PUBLIC __declspec(dllexport) // Note: actually gcc seems to also supports this syntax. #endif #else #ifdef __GNUC__ #define DLL_PUBLIC __attribute__((dllimport)) #else #define DLL_PUBLIC __declspec(dllimport) // Note: actually gcc seems to also supports this syntax. #endif #define DLL_LOCAL #else #if __GNUC__ >= 4 #define DLL_PUBLIC __attribute__ ((visibility("default"))) #define DLL_LOCAL __attribute__ ((visibility("hidden"))) #else #define DLL_PUBLIC #define DLL_LOCAL #endif #endif extern "C" DLL_PUBLIC void function(int a); class DLL_PUBLIC SomeClass { int c; DLL_LOCAL void privateMethod(); // Only for use within this DSO public: Person(int _c) : c(_c) { } static void foo(int a); }; 

如果一个班级不应该可用,则不应该在公开的标题中。 共享用户不能使用的东西的声明有什么意义?