9

私は現在 Qt でプログラムを開発しており、ライブラリ libqextserialport.1.dylib を使用しています。

ビルドして x-code で実行すると、次のように表示されます。

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

ライブラリは /Users/samuelreh/Desktop/QtOpenCV/qextserialport/build/ にあります。

実行可能フォルダー /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-codeから実行するのが最も優れた/最もエレガントな/最も簡単な方法を知っている人はいますか?

4

3 に答える 3

4

Module Bundleプロジェクトを使用して、まさにこれを実行しました。これは、別の実行可能ファイルを使用して、より大きなプロジェクトに含まれていました。

「dylibをフレームワークにコピーする」ステップを追加しました。これにより、dylibが/Foobar.bundle/Contents/Frameworks/Foobar/にコピーされました。次に、実行可能ファイル内のdylibのインストール名を修正するために、最後のステップとして実行するスクリプト実行フェーズを追加しました。

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のサプライヤにヘッダーを埋めるように説得する必要がありました...

于 2009-06-15T11:04:36.253 に答える
2

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

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

私は試したことがありませんが、ファイルのコピービルドフェーズを使用してdylibをバンドル内に配置し、実行可能ファイルがどこにあるかを認識できるようにXcodeを構成する必要があるようです。

于 2009-03-12T02:51:52.910 に答える
0

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

これを sqlite3 とココア アプリケーション (ココア タッチ) でテストしました。

于 2009-06-15T03:40:38.557 に答える