在Windows和LINUX中创建程序库[C++]

Nav*_*K N 8 c++ linux windows shared-libraries

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

在使用g ++的Linux中,我可以使用-fPIC-shared标志创建共享库.AFAIK,共享库不需要进行其他代码更改.但是Windows DLL中的情况有所不同.在那里我应该指定必须使用dllexport导出的函数,对吧?

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

使用的编译器

  • g ++ - LINUX
  • VC++ - Windows

任何帮助都会很棒!

ste*_*anB 9

我们__declspec(dllexport)为课程指定:

#define EXPORT_XX __declspec(dllexport)

class EXPORT_XX A
{
};
Run Code Online (Sandbox Code Playgroud)

然后,您可以检查平台,只在Windows上定义宏.例如:

#ifdef WIN32
#define EXPORT_XX __declspec(dllexport)
#else
#define EXPORT_XX
#endif
Run Code Online (Sandbox Code Playgroud)

我们主要构建静态库,因此可能有更多的事情要做动态库,但概念是相同的 - 使用预处理器宏来定义需要插入到Windows代码中的字符串.


Pet*_*man 5

另一种方法是只为Windows项目使用.def文件.此文件指定DLL导出,因此您不必弄乱代码库.(但是如果你想避免额外的文件,宏肯定是要走的路.)