1. ホーム
  2. Qt

コマンドラインからDSOが見つからないことに遭遇した

2022-02-12 15:34:10
<パス

まず、C++のコードでスタティックリンクライブラリ libmy.a をコンパイルしてみました。そして、このスタティックライブラリを別のCプロジェクトで呼び出したところ、以下のエラーが発生しました。

/usr/bin/ld: libmy.a(message_mm.o): undefined reference to symbol '_ZTVN10__cxxabiv117__class_type_infoE@CXXABI_1.3 '
//usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO がコマンドラインから見つかりません
collect2: エラー: ld が 1 の終了ステータスを返しました。
makefile:36: ターゲット 'main' のレシピに失敗しました。
を作成します。*** [メイン] エラー1

Cプロジェクトでは、makefileがgccでコンパイル・リンクしていたので、CとC++のリンク時の互換性の問題を疑い、Cプロジェクトでg++に切り替えたら、問題なくなった。


2019.2.22追加事項
このエラーは今日もコーディング時に発生しました。

/usr/bin/ld: .../.../base/framework/.libs/libossiecf.a(libossiecf_la-prop_helpers.o): undefined reference to symbol '_ZlSRN5CORBA3AnyEPNS_9DoubleSeqE'.
//usr/local/lib/libomniDynamic4.so.2: error adding symbols: コマンドラインから DSO が見つからない
collect2: エラー: ld が 1 の終了ステータスを返しました。
Makefile:601: ターゲット 'nodeBooter' のレシピに失敗しました。
make[2]: *** [nodeBooter] エラー1
make[2]: ディレクトリ "/home/xxx/source/redhawk-src-2.0.8/redhawk/src/control/framework" を残しています。
Makefile:482: ターゲット 'all-recursive' のレシピに失敗しました。
make[1]: *** [all-recursive] エラー 1
make[1]: directory "/home/xxx/source/redhawk-src-2.0.8/redhawk/src/control" を離れました。
Makefile:600: ターゲット 'all-recursive' のレシピに失敗しました。
を作成します。*** [all-recursive] エラー 1

このようなエラーが発生する原因は、libomniDynamic4.so.2が見つからないためです。解決方法は簡単で、コンパイルオプションに -lomniDynamic4 を追加します。