6

私はmingwgccとmsysを使用して多数のGNUユーティリティを構築しています。これまで、さまざまなバージョンのlibiconvを必要とするさまざまな実行可能ファイルが原因で多くの問題が発生したため、この問題を回避するために、iconvを実行可能ファイルに静的にリンクしたいと思いました。

configure--enable-staticでmingwとmsysを使用してlibiconvを構築しました。これにより、DLL、.dll.aインポートライブラリ、およびプレーンな.a静的ライブラリの両方が作成されます。

ただし、単純な-liconvでリンクする別のプログラムを作成しようとすると、DLLがリンクされます。ldは何らかの理由で静的ライブラリよりもインポートライブラリを優先していると思います(一般的に悪い選択ではありませんが、これは特別な場合)。

作成したプログラムが静的にリンクされていることを確認するにはどうすればよいですか?明らかなアプローチの1つは、ビルド中に.dll.aファイルを削除することです。これはおそらく最も簡単なオプションですが、興味があります-iconvを静的に(理想的には他のライブラリに影響を与えずに)強制的にロードするために(LDFLAGSなどを介して)設定できるリンカーフラグがありますが、ピンチで大丈夫ですすべてのライブラリを静的にロードする場合)

4

1 に答える 1

3

確かに、静的にリンクするように特に指示しない限り、デフォルトでは「共有」にリンクされます。あなたはこれをいくつかの方法で行うことができます。

make CC='gcc -static'
make LDFLAGS=-static
make LDFLAGS=libiconv.a

Makefileを見て、それに合わせるための最も邪魔にならない方法を見つける必要があります。

于 2013-01-01T17:03:50.380 に答える