在Windows和LINUX中创build程序库

我打算在我的C ++程序中使用库。 Linux正在进行开发,但是应用程序可以在Linux和Windows上进行编译。 我知道在Windows中共享库(.so)的直接等价物是DLL,对吧?

在使用g ++的Linux中,我可以使用-fPIC-shared标志创build共享库。 AFAIK,共享库不需要其他代码更改。 但是Windows DLL中的东西是不同的。 在那里我应该指定必须使用dllexport导出的function,对吧?

我的问题是如何处理这种情况? 我的意思是dllexport在Linux中是无效的,编译器会报错。 但在Windows中是必需的。 那么如何编写一个能在两个平台上编译而不需要更改代码的函数呢?

使用的编译器

  • g ++ – LINUX
  • VC ++ – Windows

任何帮助将是伟大的!

我们为类指定__declspec(dllexport)

 #define EXPORT_XX __declspec(dllexport) class EXPORT_XX A { }; 

然后你可以检查平台,只在窗口上定义宏。 例如:

 #ifdef WIN32 #define EXPORT_XX __declspec(dllexport) #else #define EXPORT_XX #endif 

我们主要建立静态库,所以动态库可能有更多的工作要做,但概念是一样的 – 使用预处理器宏来定义你需要插入Windows代码的字符串。

另一种选择是只为您的Windows项目使用.def文件。 这个文件指定了DLL的导出,所以你不必弄乱你的代码库。 (但是,如果你想避免额外的文件,宏指令就是这样。

您可以使用#ifdef预处理器指令进行条件编译。 例如:

 #ifdef WIN32 // Win32 specific code #else // Elsewhere #endif 

另一个选项,我现在使用的是在Windows上使用MinGW 。 这样你就可以在Windows上使用gcc了,你不必担心declspec的废话。