0

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

以下是我的工作方式:

  1. 从 D:\Projects\Zint 中的 github 存储库 git clone
  2. 在 C:\CMake 中安装 cmake
  3. 在 C:\MinGW 中安装 mingw
  4. 启动 cmake-gui,浏览到 D:\Projects\Zint
  5. 单击“配置”,在列表中选择“MinGW Makefiles”并“指定本机编译器”,接下来我指定了 c:\mingw\bin\mingw32-gcc.exe 的完整路径(确定...)
  6. 单击“配置”。它成功了,但是它添加了一些红色的变量,因为没有满足依赖项(PNG 和 QT,但我不想要它们,没有它们 zint 很好)
  7. 再次点击“配置”,一切都变白了
  8. 点击“生成”
  9. 关闭 cmake-gui
  10. 启动控制台提示
  11. 仅将路径变量环境覆盖到 C:\mingw\bin
  12. 转到“D:\Projects\Zint”并运行“mingw32-make”,然后运行“mingw32-make install”
  13. libzint.dll 和 zint.exe 被部署到“C:\Program Files\zint-package\bin”

我使用Dependency Walker查看了导出的函数,发现除了少数 ZBarcode_* 函数外,还有大约 400 个其他符号,根据源代码,我看到这些符号实际上是常量、数组和 libzint 的其他内部结构.

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

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

4

1 回答 1

0

Look in the headers for any macros that contain dllexport. If you find one or more, check that it's not malfunctioning.

Another possibility is that all classes are being exported, instead of just the few functions that are necessary.

If you have grep, do grep -nr dllexport *. This will recursively look in all files. For every hit, it will print the file name, line number, and contents of the line.

于 2012-06-19T22:43:15.553 回答