使用CMake和MinGW编译的项目的导出符号太多

时间:2012-06-18 16:45:00

标签: cmake mingw

我正在尝试使用CMake和MinGW为Windows编译libzint(条形码生成器)。目的是避免Visual Studio依赖。除了生成的.dll文件包含太多导出的符号外,所有运行正常。我应该只有ZBarcode_ *函数,但实际上几乎任何被声明为变量/常量的东西都会被导出(并且生成的.dll文件没有版本信息,我认为这很奇怪。)

以下是我的工作方式:

  1. 来自D:\ Projects \ Zint
  2. 中github存储库的git clone
  3. 在C:\ CMake
  4. 中安装了cmake
  5. 在C:\ MinGW
  6. 中安装了mingw
  7. 开始了cmake-gui,浏览了D:\ Projects \ Zint
  8. 点击“配置”,在列表中选择“MinGW Makefile”并“指定本机编译器”,接下来我指定了c:\ mingw \ bin \ mingw32-gcc.exe的完整路径(确保......)
  9. 点击“配置”。它成功但是它添加了一些红色的变量,因为不符合的依赖(PNG和QT,但我不想要它们和zint没有它们就好了)
  10. 再次点击“配置”,一切都变白了
  11. 点击“生成”
  12. 关闭了cmake-gui
  13. 启动了控制台提示
  14. 将路径变量环境覆盖到C:\ mingw \ bin only
  15. 转到“D:\ Projects \ Zint”并运行“mingw32-make”然后“mingw32-make install”
  16. 将libzint.dll和zint.exe部署到“C:\ Program Files \ zint-package \ bin”
  17. 我使用Dependency Walker来查看导出的函数,并看到除了少数ZBarcode_ *函数之外还有大约400个其他符号,并且根据源代码我看到这些符号实际上是常量,数组和libzint的其他内部结构。

    您知道如何配置或调整内容以避免所有这些导出吗?

    非常感谢您的帮助,问候。

1 个答案:

答案 0 :(得分:0)

在标题中查找包含dllexport的任何宏。如果您找到一个或多个,请检查它是否有故障。

另一种可能性是导出所有类,而不仅仅是少数必要的函数。

如果您有grep,请执行grep -nr dllexport *。这将递归查看所有文件。对于每次点击,它将打印文件名,行号和行的内容。