gpt4 book ai didi

c++ - 创建库?

转载 作者:可可西里 更新时间:2023-11-01 09:56:49 26 4
gpt4 key购买 nike

我正在使用 MSVC,但我打算让我的库跨平台。现在,我有类和函数的 h 和 cpp 文件。在 MSVC 中创建一个库就像将我的所有文件添加到标记为静态库或动态库的 Visual C++ 项目一样简单吗?或者我必须将我的类和函数设置为外部等等?

谢谢

最佳答案

对于 DLL,您需要指定 <code>__declspec(dllimport)</code><code>__declspec(dllexport)</code>根据您是构建 DLL 还是导入它。考虑这个例子:

// 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 中调用,您显然需要加入 ye olde extern "C"同样,为了防止名称混淆。


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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com