LoginSignup
5
1

More than 3 years have passed since last update.

dyld: lazy symbol binding failed: Symbol not found

Last updated at Posted at 2019-12-07

はじめに

私は現在、高エネルギー物理学や放射線治療などのシミュレーションに使われるGeant4というtool kitを使っているのですが、プログラム実行時に動的ライブラリに関するエラーが出てしまったのでその解決法を書いていきます。

エラー文

macOS
dyld: lazy symbol binding failed: Symbol not found: __ZN18G4OpenGLImmediateXC1Ev
  Referenced from: ~/Geant4Tutorial/UserWorkDir/P06/TestBench/../bin/Application_Main
  Expected in: /usr/local/lib/libG4OpenGL.dylib

dyld: Symbol not found: __ZN18G4OpenGLImmediateXC1Ev
  Referenced from: ~/Geant4Tutorial/UserWorkDir/P06/TestBench/../bin/Application_Main
  Expected in: /usr/local/lib/libG4OpenGL.dylib

このエラー文には「シンボルが見つかりません。/usr/local/lib/libG4OpenGL.dylibに欲しいライブラリがありますよ。」的なことが書いてあります。つまりプログラム実行中に欲しいライブラリのパスが通ってないということになります。

dylibとは

.dylibがついているファイルは動的ライブラリ(dynamic library)と呼ばれるもので、プログラム実行中にリンクするライブラリのことです。Windowsでは.dll、Linuxでは.so、OSXだと.dylibが拡張子として付くそうです。
つまりエラー文は動的ライブラリのパスを通せと言い換えることができます。
動的ライブラリの作り方や使い方はこのサイトにわかりやすく書いてありました。

解決法1

.bash_profileや.zprofileなどの環境設定ファイルに動的ライブラリがある場所の検索パスを通します。

.bash_profile
export DYLD_LIBRARY_PATH=/usr/local/geant4/install/geant4.10.05.p01/lib

そのあとに追加した環境変数をsourceコマンドで反映させます。

$ source ~/.bash_profile

これでエラー文は出なくなり、無事プログラムを実行することができました。

解決法2

rpathと呼ばれる、プログラム実行中に参照する動的ライブラリの検索パスのリストがあります。
以下のコマンドでrpathに直接ライブラリを追加することができます。

$ install_name_tool -id "@rpath/libG4OpenGL.dylib" libG4OpenGL.dylib

参照サイト

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1