web-dev-qa-db-ja.com

UbuntuでOpenFSTをコンパイルおよび使用しているときに「dlopenへの未定義の参照」エラーを処理するにはどうすればよいですか?

Ubuntu 13.10で OpenFST をコンパイルして使用しようとすると、「dlopenへの未定義参照」などのリンクエラーが発生します。これをどのように修正しますか?オンラインで検索するには、gccコマンドラインに-ldlを含めることをお勧めしますが、それだけでは不十分です。

2
Prateek

次のようにコンパイルします。

./configure LDFLAGS=-Wl,--no-as-needed
make
Sudo make install

ライブラリを使用するa.cppをコンパイルするには、次のようにします。

g++ -I /usr/local/include a.cpp /usr/local/lib/libfst.so -Wl,--no-as-needed -ldl

-ldl-Wl,--no-as-neededの後に表示されることが重要です。

OpenFSTが提供するREADMEから期待どおりにプログラムを実行できます。/usr/local/libLD_LIBRARY_PATHが必要です。例えば、

LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" ./a.out
9
Prateek

組み込みルールのカタログ に見られるように:

単一のオブジェクトファイルのリンク

nは、Cコンパイラを介してリンカー(通常ldと呼ばれる)を実行することにより、n.oから自動的に作成されます。使用される正確なレシピは次のとおりです。

$(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS)

および 暗黙のルールで使用される変数

LDFLAGS

コンパイラがリンカを呼び出すことになっているときにコンパイラに与える追加フラグ、ld-Lなど)。代わりに、ライブラリ(-lfoo)をLDLIBS変数に追加する必要があります。

したがって、この場合、-ldlはLDFLAGSではなく、LDLIBSに設定または追加する必要があります。

3
user544875