如何使用 g++ 为 Windows 创建静态和动态库?
我为 Linux 找到了一些用于创建.so
文件的命令,并尝试在 Windows shell 上应用它们,但它们构建.dll
了我的应用程序在运行时无法链接的文件。
我只设法.dll
使用 Visual C++ 构建文件,但我想在命令行上手动构建它们,最好使用g++
. 我也想知道如何为 Windows 构建静态库。
如何使用 g++ 为 Windows 创建静态和动态库?
我为 Linux 找到了一些用于创建.so
文件的命令,并尝试在 Windows shell 上应用它们,但它们构建.dll
了我的应用程序在运行时无法链接的文件。
我只设法.dll
使用 Visual C++ 构建文件,但我想在命令行上手动构建它们,最好使用g++
. 我也想知道如何为 Windows 构建静态库。
您需要前缀属性:
__declspec(dllexport)...
您要公开的所有功能。
看到这个。
C 函数的示例:
__declspec(dllexport) int __cdecl Add(int a, int b)
{
return (a + b);
}
这可以使用以下方法进行简化MACROS
:所有内容都在这个有用的页面上进行了解释。
对于 C++ 类,您只需为每个类添加前缀(而不是每个方法)
我通常这样做:
注意:以下还确保了可移植性...
包含文件:
// my_macros.h
//
// Stuffs required under Windoz to export classes properly
// from the shared library...
// USAGE :
// - Add "-DBUILD_LIB" to the compiler options
//
#ifdef __WIN32__
#ifdef BUILD_LIB
#define LIB_CLASS __declspec(dllexport)
#else
#define LIB_CLASS __declspec(dllimport)
#endif
#else
#define LIB_CLASS // Linux & other Unices : leave it blank !
#endif
用法 :
#include "my_macros.h"
class LIB_CLASS MyClass {
}
然后,要构建,只需:
-DBUILD_LIB
给通常的编译器命令行-shared
给通常的链接器命令行