c++ - 将dll编译为静态库时如何处理DLL_EXPORT?

标签 c++ windows static-libraries dllexport

我在 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/

相关文章:

iphone - 如何在 Xcode 中使用带有嵌套静态库的调试器?

c++ - 构建后Eclipse将头文件复制到特定位置

java - 在 Windows-7 64 位上运行 hadoop

.net - 向其动态添加控件时如何使面板滚动保持在顶部?

c++ - 使用 C++ 合并静态库时出现 undefined reference 错误

c++ - iOS:添加C++静态库后应用体积太大?

c++ - 其构造函数抛出异常的对象的异常处理是否可以接近其基于代码的堆栈创建?

C++ 对象不可访问

c++ - 如何迭代地获取具有重复元素的排序旋转数组中的枢轴点?

windows - 如何将 WinRT 异步任务集成到现有的同步库中?