Ubuntu 13.10で OpenFST をコンパイルして使用しようとすると、「dlopenへの未定義参照」などのリンクエラーが発生します。これをどのように修正しますか?オンラインで検索するには、gccコマンドラインに-ldl
を含めることをお勧めしますが、それだけでは不十分です。
次のようにコンパイルします。
./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/lib
にLD_LIBRARY_PATH
が必要です。例えば、
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" ./a.out
組み込みルールのカタログ に見られるように:
単一のオブジェクトファイルのリンク
n
は、Cコンパイラを介してリンカー(通常ld
と呼ばれる)を実行することにより、n.o
から自動的に作成されます。使用される正確なレシピは次のとおりです。$(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS)
および 暗黙のルールで使用される変数 :
LDFLAGS
コンパイラがリンカを呼び出すことになっているときにコンパイラに与える追加フラグ、
ld
(-L
など)。代わりに、ライブラリ(-lfoo
)をLDLIBS変数に追加する必要があります。
したがって、この場合、-ldl
はLDFLAGSではなく、LDLIBSに設定または追加する必要があります。