C++ 跨平台动态链接(Windows到linux)

C++ 跨平台动态链接(Windows到linux),c++,dll,cross-platform,C++,Dll,Cross Platform,我有一个应用程序,我已经设法在windows和Linux之间保持合理的跨平台。Cmake和Boost在这方面起到了帮助作用 现在是链接到为windows编写的.dll的时候了。如果我可以推迟动态链接库的转换,那将是一件好事。其他windows应用程序连接到此库,如下所示: HINSTANCE dll; dll = LoadLibraryA(filename); //... libFuncPtr = (libFuncPtr)GetProcAddress(dll, "libFunc"); 我想知道

我有一个应用程序,我已经设法在windows和Linux之间保持合理的跨平台。Cmake和Boost在这方面起到了帮助作用

现在是链接到为windows编写的.dll的时候了。如果我可以推迟动态链接库的转换,那将是一件好事。其他windows应用程序连接到此库,如下所示:

HINSTANCE dll;
dll = LoadLibraryA(filename);
//...
libFuncPtr = (libFuncPtr)GetProcAddress(dll, "libFunc");
我想知道这些函数是否有通用的类似物,或者是时候开始删除系统特定的预处理器指令了?Developemt当前的优先级是Windows,应该知道库中必须有一个Linux端口,Linux构建才能正常工作,但我希望尽可能保持调用代码的通用性

开始删除系统特定的预处理器指令

您可以编写一个中介接口来提供调用适当本机API的函数,如
LoadLib()
LoadSym()
,等等。换句话说,在为Windows编译时,
LoadLib()
将使用
LoadLibraryA()
,在Linux上将使用
dlopen()


这将使您可以在主代码中隐藏代码中丑陋的部分,从而使其更具可读性。

此类的一个很好的例子是Qt的QLibrary,它具有将动态库加载到程序中的统一接口

有关更多详细信息,请参阅

因为Qt是跨平台的,所以它可以在任何地方使用。由于Qt是开源的,您可以浏览一下代码。如果您不需要Qt中的其他东西,我不会直接使用它,因为它本身就有一个很大的链接包


我记得在过去实现过类似的东西,但代码早已过时。

如果您可以访问DLL的代码库(听起来像是这样),那么一个选项就是在Windows上使用,以消除对
LoadLibrary
GetProcAddress
的调用


当您着手将库移植到Linux时,您可以将其构建为一个静态库,并将您的应用程序与之链接,这样就不需要对代码库进行任何更改。

您可以使用。

另一个选项是dlfcn-win32。它使用dlopen()、dlsym()和dlclose()就像在Linux中一样