首页 > 后端开发 > C++ > 如何在 CMake 中从 DLL 导出所有符号而不手动定义它们?

如何在 CMake 中从 DLL 导出所有符号而不手动定义它们?

Linda Hamilton
发布: 2024-11-24 16:21:28
原创
570 人浏览过

How Can I Export All Symbols from a DLL in CMake Without Manually Defining Them?

创建 DLL 时如何导出所有符号

在 Visual Studio 2005 中,从 DLL 导出所有符号,无需手动添加 __declspec(dllexport) 或创建 .def 文件提出了挑战。幸运的是,现在可以使用最新的 CMake 版本(cmake-3.3.20150721-g9cd2f-win32-x86.exe 或更高版本)来实现这一点。

简答

自动导出中的所有符号DLL,在 CMake 中将 CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS 设置为 ON项目:

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
登录后复制

长答案

1。使用 __declspec(dllexport) 导出符号

  • 将 __declspec(dllexport) 添加到要导出的类和方法。
  • 如果使用 C,则使用 extern "C" 导出为 C 函数编译器导出 C 函数。

2.创建模块定义 (.def) 文件

  • 通过在 .def 文件中添加函数声明来导出 C 函数。
  • 使用 dumpbin/LINKERMEMBER 从静态库导出符号解析输出并创建 .def 文件。
  • 使用以下命令从 .obj 文件导出符号CMake:

    • 在 CMake 项目中使用 set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)。
    • CMake 将从 .obj 文件中提取符号并在预链接期间动态创建 .def 文件

没有 CMake:

  • 手动解析 .obj 文件以提取符号并创建 .def 文件。

注意:禁用使用CMake方法导出符号时的整个程序优化(/GL)。

以上是如何在 CMake 中从 DLL 导出所有符号而不手动定义它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板