2017-07-21 8 views
1

私は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を使用してバイナリパスを基準にすることも、絶対パスを指定することもできます。

答えて

1

これはすでにknown issueだと思っており、修正されました。ご迷惑おかけして申し訳ありません。

[編集:修正を提出した後に更新]

+0

Thx for the info。その間、Macでは、問題がBazelで解決されるまで、私はトリックを行う醜い作りをしました... – Sistr

+0

問題はちょうど修正されました、私は答えを更新しました。 – mhlopko

+0

すぐに試してみてください。すぐ後にあなたの答えをマークしてください:) – Sistr

関連する問題