1

私はOSX10.6のプライベートフレームワークに取り組んでいます。これには、いくつかのコマンドラインツールといくつかのdylibが含まれています。ここで、dylibは相互にリンクする必要があり、コマンドラインツールはdylibに対してリンクする必要があります。

コマンドラインツールと.dylibsはResources、フレームワークバンドル内のフォルダー内にあります。私はinstall_name_toolすべてのパスを次のように更新するために使用しました:

@executable_path/../Frameworks/MyCompany.framework/Versions/A/Resources/lib.dylib

これで、アプリケーションで使用するとすべてのdylibが正しく読み込まれますが、実行時のコマンドラインツールdyld: Library not loadedは次のように実行すると失敗します。

// dylibpath is an NSString set the the path of the Resources folder within the framework

NSTask *task = [[[NSTask alloc]init]autorelease];
[task setEnvironment:[NSDictionary dictionaryWithObjectsAndKeys:@"DYLD_LIBRARY_PATH", dylibPath, nil]];
[task setLaunchPath:binConvert];
[task launch];
[task waitUntilExit];

今、私はWindowsのバックグラウンドから来ており、ローダーがDLLがアプリと同じフォルダーにある場合、DLLを見つけますが、明らかにOSXは完全なパスを探します。コマンドラインツールで同じフォルダ内のdylibを検索するにはどうすればよいですか?

ありがとう、J

4

1 に答える 1

2

私が試すことができる2つのことが考えられます。

オプション1

使用@rpathすることは、あなたがやろうとしていることに適しているかもしれません。ここで起こっていることはこれです:

すべてのライブラリは、実行可能ファイルに対して同じ位置に配置されることを期待しています。それらはすべて次の場所にあります。

@executable_path/../Frameworks/MyCompany.framework/Versions/A/Resources/lib.dylib

すべてのライブラリを実行可能ファイルに対して適切な場所に配置する限り、これを機能させることができます。代わりに、dylibsのインストール名を(経由でinstall_name_tool)に設定できます@rpath/lib.dylib。これはDYLD_LIBRARY_PATH環境変数で機能するはずですが、コンパイラフラグでの使用に非常に適している-rpathため、これは機能する可能性がありますが、私は試したことがありません。

オプション2

実行可能ファイルからインストール名として設定したパスをトラバースすることでライブラリが実際に見つかるように、シンボリックリンクを作成することもできます。

于 2011-02-03T18:34:36.623 に答える