我在 Visual C++ 2010 中有一个项目,其中包含关键头文件中的预处理器指令。其实就是ZMQ源码。
项目通常配置为dll,所以header使用了DLL_EXPORT的状态(defined/not defined)。如果项目用于编译 dll,则头文件可由 dll 项目或客户端代码使用,这要归功于从 zmq.h 中获取的以下设置:
#if defined _WIN32
# if defined DLL_EXPORT
# define ZMQ_EXPORT __declspec(dllexport)
# else
# define ZMQ_EXPORT __declspec(dllimport)
# endif
但是,这不支持我正在构建静态库的设置。因此我必须手动修改标题。 Visual Studio 似乎可以识别 dll 项目设置并相应地处理 dll_export 的定义。是否有 visual studio 可以识别的符号,对应于静态库设置?基本上,我想通过扩展上面代码片段中使用的方法来处理静态库的编译和使用。
最佳答案
我只想介绍第二个(可选的)宏,类似于 ZMQ_STATIC
:
#if defined(ZMQ_STATIC)
# define ZMQ_EXPORT
#elif defined(DLL_EXPORT)
# define ZMQ_EXPORT __declspec(dllexport)
#else
# define ZMQ_EXPORT __declspec(dllimport)
#endif
在将库构建为静态库或将其作为静态库使用时定义所述宏。
关于c++ - 将dll编译为静态库时如何处理DLL_EXPORT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6259022/