2009-03-12 10 views
9

私は現在Qtでプログラムを開発しており、ライブラリlibqextserialport.1.dylibを使用しています。Xcodeで動的ライブラリをリンクするにはどうしたらいいですか?

私はそれを構築し、X-コードで実行し、それが戻ってくれる:

dyld: Library not loaded: libqextserialport.1.dylib 
    Referenced from: /Users/samuelreh/Desktop/QtOpenCV/build/Debug/QtOpenCV.app/Contents/MacOS/QtOpenCV 
    Reason: image not found 

ライブラリは、中/ユーザー/ samuelreh /デスクトップ/ QtOpenCV/qextserialport /ビルド/位置しています。

私は/Users/samuelreh/Desktop/QtOpenCV/build/Debug/QtOpenCV.app/Contents/MacOS/実行可能なフォルダに変更して入力することによって、私のプログラムを実行することができます。

install_name_tool -change libqextserialport.1.dylib /Users/samuelreh/Desktop/QtOpenCV/qextserialport/build/libqextserialport.1.dylib QtOpenCV

は、私が知っていますおそらくこれ以外にも多くの解決策があります。誰でも最高の/最もエレガントな/ xコードからやるのが最も簡単なことを知っていますか?

答えて

2

あなたの問題を正しく理解していれば、あなたのアプリケーションは正常にビルドされていますが、リンク時にエラーは発生しませんが、起動しようとするとライブラリが見つかりません。

これは驚くことではありません.dylibファイルは、システムパス上にない任意のディレクトリにあるためです。 /usr/libにコピーするか、アプリケーションバンドルに組み込む必要があります。後者はおそらくより良いアプローチです。

私はそれを試したことはありませんが、Copy Files Build Phaseをバンドルの中に入れてから、configure Xcodeを実行ファイルに置く必要があります。

+0

バンドルなしで実行可能ファイルをビルドする場合はどうすればよいですか? – John

0

ディレクトリからXcodeプロジェクトにライブラリをドラッグするだけでリソースに最適ですが、問題はありません(私は信じています)。私は 'バンドルにファイルをコピーする'をチェックしてみたこともありませんでしたが、どちらの場合でもうまく動作します。バンドルに含める必要があるかどうかは分かりません。

私はこれをsqlite3とcocoaアプリケーション(cocoa-touch)でテストしました。

4

モジュールバンドルプロジェクトを使用してこれまでの作業を完了しました。これは別の実行可能ファイルを持つ大きなプロジェクトに含まれていました。

dylibを/Foobar.bundle/Contents/Frameworks/Foobar/にコピーした "dylibs to frameworks"ステップを追加しました。それから私は、実行可能でdylibsのインストール名前を修正するために、最後のステップとして実行するスクリプトの実行フェーズを追加しました:

もちろん
install_name_tool -change libBobDylan.dylib @executable_path/../Plugins/Foobar.bundle/Contents/Frameworks/Foobar/libBobDylan.dylib path/to/build/product/Foobar.Bundle/Contents/MacOS/Foobar 

は、libBobDylan.dylibもlibBillyIdol.dylibにリンクされています。だから私はここに名前をインストールする修正するために、ターゲットの非常に開始時に別のスクリプトの実行フェーズを追加する必要がありました:

install_name_tool -change libBillyIdol.dylib @executable_path/../Plugins/FooBar.bundle/Contents/Frameworks/Foobar/libBillyIdol.dylib local/path/to/libBobDylan.dylib 

私はとリンクするには、これらのダースを超える持っていました。私は多くのinstall_nameの変更に対応するために、dylibのサプライヤにヘッダを埋め込むように説得しなければなりませんでした。

関連する問題