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

を含むマクロのヘッダーを調べますdllexport。1 つ以上見つかった場合は、誤動作していないことを確認してください。

もう 1 つの可能性は、必要ないくつかの関数だけではなく、すべてのクラスがエクスポートされていることです。

ある場合はgrep、実行してくださいgrep -nr dllexport *。これにより、すべてのファイルが再帰的に検索されます。ヒットごとに、ファイル名、行番号、および行の内容が出力されます。

于 2012-06-19T22:43:15.553 に答える