私はBazelを使用してプログラムをコンパイルしていますが、私はインテル®TBBに依存しています。 インテルTBBは、好奇心が強い場合(理由がある場合はctrl+f static here)、動的ライブラリ(静的ではありません)のみを提供します。私bazelのワークスペースにMacOSでBazelを使用してダイナミックライブラリをリンクする
私はそのルールを定義した:
new_local_repository(
name = "inteltbb",
path = "./third_party/intel_tbb",
build_file = "./third_party/inteltbb.BUILD",
)
と私の "inteltbb.BUILDは" 私が持っているに:私の最終的なプログラム(cc_binaryルールの下)で次に
cc_library(
name = "dynamic_lib",
srcs = ["build/macos_intel64_clang_cc8.1.0_os10.12.5_debug/libtbb_debug.dylib"],
hdrs = glob(["include/**/*.h"]),
visibility = ["//visibility:public"],
strip_include_prefix = "include/"
)
I
deps = [
"@inteltbb//:dynamic_lib", [...]
正常にコンパイルされ、ヘッダーが正常に見つかりますが、実行時には次のようにクラッシュします。
____Running command line: bazel-bin/build-game
dyld: Library not loaded: @rpath/libtbb_debug.dylib
Referenced from: /private/var/tmp/_bazel_dmabin/526b91f44cfc47d856222c6b20765cc8/execroot/__main__/bazel-out/darwin_x86_64-fastbuild/bin/build-game
Reason: image not found
私は(実行ファイルがランタイム実行のためのシンボリックリンクがある:bazel-binに/ビルドgame.runfiles/メイン /) "bazelビン" フォルダの下にチェックして、私が持っています:
を- 実行可能ファイルのシンボリックリンク(ビルドゲームを)
- (自分を引き締める)というフォルダ:
_solib_darwin_x86_64/[email protected]_S_S_Cdynamic_Ulib___Uexternal_Sinteltbb_Sbuild_Smacos_Uintel64_U clang_Ucc8.1.0_Uos10.12.5_Udebug
インテルTBBのための私のlibtbb_debug.dylib
が含まれています。
また、私は実行すると:otool -l build-game | grep LC_RPATH -A2
結果は次のとおりです。
cmd LC_RPATH
cmdsize 152
path $ORIGIN/_solib_darwin_x86_64/[email protected]_S_S_Cdynamic_Ulib___Uexternal_Sinteltbb_Sbuild_Smacos_Uintel64_Uclang_Ucc8.1.0_Uos10.12.5_Udebug (offset 12)
私の実行ファイルは、私のdylibを見つけられない理由を私は理解していません。私はotoolの出力について何か間違ったものは見つけられませんが、私はMacの専門家ではありません。 ご了承ください。
[編集] 私はそのようなdylibへのパスを交換するコマンドotool使用して実行可能ファイルを編集する場合:
@executable_path/_solib_darwin_x86_64/[email protected]_S_S_Cdynamic_Ulib___Uexternal_Sinteltbb_Slib/libtbb_debug.dylib
そして、それが正常に動作します。私は正しいとは思わないが、すべてのコンパイルでそれを行うように強制する。/
[編集2] 私は実行ファイルのlibのパスを変更するために私が使った行をいくつか聞いた。 最初の実行:
otool -L build-game
を変更したいのlibのパスを発見します。私の場合、それは:@ rpath/libtbb_debug.dylibでした。 実行後:
install_name_tool -change @rpath/libtbb_debug.dylib @executable_path/_solib_darwin_x86_64/[email protected]_S_S_Cdynamic_Ulib___Uexternal_Sinteltbb_Slib/libtbb_debug.dylib build-game
パスを変更します。 @executable_pathを使用してバイナリパスを基準にすることも、絶対パスを指定することもできます。
Thx for the info。その間、Macでは、問題がBazelで解決されるまで、私はトリックを行う醜い作りをしました... – Sistr
問題はちょうど修正されました、私は答えを更新しました。 – mhlopko
すぐに試してみてください。すぐ後にあなたの答えをマークしてください:) – Sistr