私はLLVMで遊んでおり、JITを使用しようとすると問題が発生します。私はコンパイラをビルドすることができました。コンパイルされ、リンクされ、正しく実行されます(私のおもちゃプログラムをコンパイルします)。しかし、JITをビルドしようとすると失敗します。llvm:dyld:シンボルが見つかりません:__ZN4llvm11RuntimeDyld13MemoryManager6anchorEv
dyld: Symbol not found: __ZN4llvm11RuntimeDyld13MemoryManager6anchorEv
Referenced from: /Users/gruszczy/Projects/shwifty/./bazel-bin/_solib_darwin//liblibjit.so
Expected in: flat namespace
in /Users/gruszczy/Projects/shwifty/./bazel-bin/_solib_darwin//liblibjit.so
Abort trap: 6
私はこれらが私のビルドルールです、すべてを構築するためにBazelを使用します。それからかどうかを確認するための方法を実行し、それをJIT(私はテストでIRを生成
new_local_repository(
name = "llvm",
path = "/opt/local/libexec/llvm-4.0",
build_file= "llvm.BUILD")
cc_library(
name = "main",
srcs = glob(["lib/*.a"]),
hdrs = glob(["include/**/*.*"]),
visibility = ["//visibility:public"],
copts = ["-Iexternal/llvm/include"],
)
私はテストでJITを使用出来た)。
cc_library(
name = "jit",
srcs = ["jit.cc"],
hdrs = ["jit.h"],
deps = [
":ast",
":common",
"@llvm//:main"
],
copts = GENERAL_COPTS)
cc_test(
name = "codegen_test",
srcs = ["codegen_test.cc"],
deps = [
":ast",
":jit",
":lexer",
":parser",
":codegen",
"@gtest//:main",
"@llvm//:main"
],
copts = TEST_COPTS,
data = [":examples"],
size = "small"
)
私が紛失している可能性のあることはありますか?
brew(Mac OS)によってインストールされたLLVMバージョンでは、このライブラリは 'libLLVMRuntimeDyld.a'と呼ばれます。 LLVMの配布に応じて、プログラムにリンクする必要があります。あなたのディストリビューションでは、静的ライブラリ '.a'ではなく動的ライブラリ' dylib'があります。 –
'/ opt/local/libexec/llvm-4.0/lib/libLLVMRuntimeDyld.a'にはこのライブラリがあり、作成するllvmライブラリに含める必要があります。私が追加する必要があるいくつかの追加のフラグはありますか? – gruszczy
あなたのコードは正確には分かりませんが、そのシンボルがない理由の1つです: '__ZN4llvm11RuntimeDyld13MemoryManager6anchorEv'は、このライブラリのすべてのシンボルを' -force_load'にリンカーに伝える必要があるかもしれません。 JITコードからのみ使用してください。 –