0

これは、検索する適切な用語がわからなくなる前に尋ねられた可能性があります。

ローカルネットワーク上のMySQLサーバーと通信するOSXデスクトップで実行するクライアントサーバーアプリケーションを作成しています。基本的に一連のSQLステートメントが内部的に完全である場合、WebサービスAPIを実装するのは長い時間がかかるようです。

開発マシンでのMySQLサーバーのインストール手順に取り組んだので、ヘッダー検索パスにインクルードパスを配置したとしても、広告はlibmysqlclient.18.dylibを/ usr/libにシンボリックリンクする必要がありました。

私が知る必要があるのは、libmysqlclient.18.dylibファイルにアクセスできる他のマシンに送信できる.appファイルを作成する方法です。

私はこれを行うためのインストーラーを持っているWindowsに慣れており、OSXプログラミングには少し新しいですが、iDevices用のObj-cを2年間行っています。

ライブラリを.appファイルにコピーできるようにする設定はありますか、それとも各マシンにmysqlコネクタをインストールする必要がありますか?そうであれば、シンボリックリンクの問題を回避するにはどうすればよいですか、理想的にはストックから動作する必要がありますフォルダ。

これがどこかで答えられたなら、私を正しい方向に向けてください。

4

1 に答える 1

2

ビルド時に、OS Xの静的リンカーldは、アプリケーションがリンクする各ライブラリの共有ライブラリ識別子をアプリケーションバイナリに書き込みます。実行時に、ダイナミックリンカdyldは、アプリケーションバイナリで指定されたパスから各共有ライブラリをロードしようとします。この情報は、を使用して確認できますotool -L YourApp.app/Contents/MacOS/YourApp

libmysqlclient.18.dylibを/usr/ libにシンボリックリンクする必要があるという事実は、libmysqlclient.18.dylibの共有ライブラリ識別子が/usr/lib/libmysqlclient.18.dylibのようなものであることを示唆しています。アプリケーションが/usr/ libを検索するのではなく、ライブラリを使用するように.appバンドルにライブラリを含めるには、次のことを行う必要があります。

  1. libmysqlclient.18.dylibの共有ライブラリ識別子を変更して、dyldがアプリケーションバイナリに関連するバイナリを検索するようにします。これは通常、を実行することによって行われますinstall_name_tool -id @executable_path/../Frameworks/libmysqlclient.18.dylib libmysqlclient.18.dylib

  2. 変更したlibmysqlclient.18.dylibをアプリケーションバンドルのFrameworksサブダイレクトにコピーします。これは通常、Xcodeプロジェクトのファイルのコピービルドフェーズを使用して行われます。

これで、アプリケーションバイナリに書き込まれたインストール名が(再度使用する)@executable_path/../Frameworks/libmysqlclient.18.dylibではなく、ではないことを確認できるはずです。インストール名が正しくない場合は、リンカー検索パスが、他のバージョンよりも先に変更されたバージョンのlibmysqlclient.18.dylibを見つけるように設定されていることを確認する必要があります。/usr/lib/libmysqlclient.18.dylibotool -L YourApp.app/Contents/MacOS/YourApp

于 2013-01-19T04:57:16.753 に答える