我正在使用MSVC,但我打算使我的图书馆跨平台。
现在,我有了类和函数的h和cpp文件。在MSVC中制作库是否像将所有文件添加到标记为静态库或动态库的Visual C++项目中一样简单?还是我必须让我的类和函数变成extern而不是?

谢谢

最佳答案

对于DLL,您将要根据是构建DLL还是导入DLL来指定__declspec(dllimport)__declspec(dllexport)。考虑以下示例:

// MyHeader.h, part of FooDLL

#ifdef BUILDING_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif

void DLL_EXPORT MyFunction();

class DLL_EXPORT MyClass {
public:
 MyClass();
};

注意:我重新排序了“void”和“DLL_EXPORT”(以前称为DLL_FUNCTION)的顺序。

在DLL项目中包含 header 时,功能将被标记为导出。当从另一个项目(没有BUILDING_DLL预处理程序定义)中包含它时,它将被解释为DLL导入。这可以完全相同的方式应用于类。在Linux(以及可能的其他类似平台)上,您可以安全地将DLL_FUNCTION定义为一无所有,因为这不是必需的。

编辑:,如果您希望可以从C中调用函数,则显然也希望输入旧的extern "C",以防止名称困惑。

编辑2:实际上,在构建DLL时,MSVC也会生成一个静态库。任何使用DLL的项目都必须与该库链接(该库实际上不包含可执行代码;它仍然可以像人们期望的那样动态链接)才能满足链接器的要求。

关于c++ - 创建一个图书馆?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3876337/

10-11 22:47
查看更多