11

64 ビット Linux (debian) マシンで cmake と gcc を使用してこのプロジェクトをビルドしようとすると、リンカーからエラーが発生します。

Linking C executable ../../../../cpsadamsx
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlopen'
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlclose'
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlerror'
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlsym'
collect2: ld returned 1 exit status
make[2]: *** [cpsadamsx] Error 1
make[1]: *** [sundials/examples/cpodes/serial/CMakeFiles/cpsadamsx.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

どうやら dlopen、dlclose、dlerror、および dlsym は libdl.so への参照です。そのライブラリは /lib64/libdl.so.2 にありますが、見つからないのはなぜですか?

通常の「./configure;」だったでしょうか。作る; make install'-path LIBS 変数を設定して、configure コマンドを次のように発行することもできたはずです (と思います)。

export LIBS=-ldl && ./configure

しかし、どうすれば今それを行うことができますか?

アップデート:

そのため、(または少なくとも)ライブラリが見つかったようですが、問題のシンボルは含まれていません。/lib にある 32 ビット ライブラリで試してみませんか?

/lib64/libdl.so.2 を逆アセンブルして、参照 dlopen などがあることを確認する方法はありますか?

この問題により、ビルド ツールが正しいバージョンのライブラリに導かれるようになりました。

4

3 に答える 3

37

この質問はグーグルに表示されており、両方の答えがここで正しい解決策を示していないので、それは次のとおりです。

CMakeLists.txt${CMAKE_DL_LIBS}で、idlに対するリンクを追加します。これは次のようになります。

target_link_libraries(ExpandableTest
    ${CMAKE_DL_LIBS}
    Expandable
    ExpandableTestLibrary
)
于 2011-11-23T14:31:20.563 に答える
1

おそらく target_link_libraries() を追加する必要があります -リンクテキストを参照してください

于 2009-08-13T21:06:12.643 に答える
0

これを CMakeLists.txt に追加すると、動作するはずです。

SET (CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -ldl")
于 2010-01-20T15:24:40.223 に答える