リンクはジャッキされています.. -rpathとは何ですか? macos x
-
27-09-2019 - |
質問
そこで、私はプロジェクトを構築しており、コンパイルされたライブラリ(.dylibまたは.so)の関数を使用しています。私は適切な場所にヘッダーとライブラリファイル(これはすべてQtrootの一部です)を持っていますが、Xcodeでプロジェクトを構築しようとすると、デバッガーエラーが発生します。
dyld:Library not Loaded: @rpath/librio.so:/users/paulthompson/documents/build product/debug/macheliossim.app/contents/macos/macheliossim理由から参照データは一時的に利用できませんが、「続行」後に再試行します。 (現在、ローダーを呼び出すことはできません、それはロックされています。)
これで、構築されたプログラム自体は、ファインダーから開くと正常に実行されますが、Xcodeから実行しようとするたびに、それは私を覆います。このrpathのことは何ですか、そしてなぜデバッガーはライブラリを見つけることができないのですか?
解決
http://en.wikipedia.org/wiki/rpath_(linking)
それは、共有Libsを見つけるためにバイナリに保存されたパスです。 Finderからアプリを開始すると、おそらくアプリバンドルですか?アプリバンドルが作成されると、共有ライブラリがアプリバンドルにコピーされ、バンドルされたライブラリへのパスが相対的になります。 (@executable_path /../ freamworks/foobar)。 Finderから機能するバージョンをどのように作成しましたか?
上記のエラーは、リンク時間に発生しますか、それともXcodeからアプリケーションを起動するときに発生しますか? (後者の場合、dyld_library_pathでお試しください)
また、.dylibの代わりにLibrioの.so拡張は少し疑わしいように見えます。
他のヒント
この(QT作成者)のように、リンク段階でRPATを追加します。例:
libs += -l/usr/locial/root/lib -lgui -lcore -lcint -lrio -lnet -lhist -lgraf -lgraf3d -lgpad -ltree -lrint -lpostscript -lmatrix -lphysics -lmathcore -lthread -lpthread -wl -rpath、/usr/local/root/lib -lm -ldl