web-dev-qa-db-ja.com

CMAKE_DL_LIBSにもかかわらず、「dlopen」への未定義の参照

Gameplay3dのツールをインストールしようとしています。 cmakeインストール手順 を実行した後、次のエラーが表示されます。

Linking CXX executable gameplay-encoder
/usr/lib/gcc4/x64/release/libfbxsdk.so: undefined reference to `dlopen'
/usr/lib/gcc4/x64/release/libfbxsdk.so: undefined reference to `dlclose'
/usr/lib/gcc4/x64/release/libfbxsdk.so: undefined reference to `dlsym'

CMakeLists.txtファイルにはこれらの定義が含まれています(注意-ldlおよび${CMAKE_DL_LIBS}、これは関連するスレッドの他の人の問題を解決するように見えた):

add_definitions(-lstdc++ -ldl -lfbxsdk -lpng -lz -lfreetype -lpthread)
...
target_link_libraries(
    ${APP_NAME}
    ${APP_LIBRARIES}
    ${CMAKE_DL_LIBS}
)

助けてくれてありがとう!

1
wrongu

私がコメントで書いたように:
Ubuntu 13.10 64ビットでも同じ問題が発生しました。次のように解決したため、問題の原因が同じUbuntuバージョンであるかどうかはわかりません。

Pluma library の自己コンパイルバージョンを使用しました。 Pluma libを使用した own project をコンパイルしようとすると、上記のエラーが発生しました。私はあなたのような${CMAKE_DL_LIBS}を追加しようとしましたが、成功しませんでした。

その理由は、最初にPlumaをlibdlと手動でリンクする必要があったためです(-ldlを追加)。その後、libPluma.soを問題なく使用できました。 Plumaが-ldlなしでコンパイルされた理由はわかりませんが、リンカーが正常に動作していないと推測できます。

短くする(そして実際の質問に答える)には:
libfbxsdk.so-ldlをリンクする必要がありますが、gameplay-encoderとリンクするだけでは役立ちません。

1
MOnsDaR