gpt4 book ai didi

c++ - 导出符号时如何处理多个库?

转载 作者:太空狗 更新时间:2023-10-29 23:16:30 26 4
gpt4 key购买 nike

我正在开发一个项目(跨平台,但在这种情况下只有 Windows 很重要),它创建了大量共享库(它们在某种程度上相互依赖)。所有声明函数或结构/类/枚举/等的头文件。位于单独的/include 文件夹中,但源文件被分组到模块中。

我已经为 _declspec 导入/导出创建了一个宏,但我的问题是:

我是否应该有一个不同的预处理器指令来触发每个库的导出版本?由于库可以使用属于其他库的 header ,将这些符号视为导入是否重要?

根据我在模拟项目上的测试,您可以将它们全部作为导出符号,它们仍然有效,但这是好的做法吗?

谢谢。

最佳答案

您应该创建一个宏来声明您希望从库中导出的类/函数的导出。所有包含 header (您的依赖项)都应声明为导入。我不了解每次导出所有内容如何为您工作(不应该)。

这是一个例子-

在 .h 文件中定义第一个库。在项目文件中定义一个预处理器 __your_module_name>_DLL__

库1头文件:

#ifdef __<your_module_name>_DLL__
#define <your_module_name>_EXPORT __declspec(dllexport)
#else
#define <your_module_name>_EXPORT __declspec(dllimport)
#endif

class <your_module_name>_EXPORT someName
{
....
}

在第二个库上,如果它导入第一个库头文件并假设 __<your_module_name>_DLL__预处理未在其项目文件中定义,someName类将是 imported而不是 exported .

这将允许您在编译期间正确使用交叉依赖。

关于c++ - 导出符号时如何处理多个库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23602812/

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