[C++] 313 Makefileでのライブラリ設定 MacOS

[M1 Mac, MacOS Ventura 13.3.1, clang 14.0.3]

Linuxはどうなっているのか分かりませんが、MacOSでのライブラリ設定は結構ややこしいです。

ライブラリパスを.bash_profileでDYLD_LIBRARY_PATHとして設定しておかないとビルドはできても実行はできません。

仕組みがよく分からないまま放置していましたが、ようやく明確にできました。

デフォルトのライブラリパスである/usr/local/libなどに配置すれば今回のような設定は不要です。他のライブラリとは分けて管理したかったためライブラリパスを追加した次第です。

# D2XXライブラリの場合
# /usr/local/D2XX/libにはlibftd2xx.aとlibftd2xx.dylibを配置

# includeパス(-I)
INCLUDE = -I/usr/local/D2XX/include

# ライブラリ(-l) 動的ライブラリ優先
LIBS = -lftd2xx
# 静的ライブラリのフルパス(実行ファイルに取り込まれる、ライブラリパス不要)
# LIBS = /usr/local/D2XX/lib/libftd2xx.a
# 動的ライブラリのフルパスは使えない

# ライブラリパス(-L) .bash_profileでDYLD_LIBRARY_PATHとしての設定も必須
LIBPATH = -L/usr/local/D2XX/lib

includeパスは.bash_profileでも設定できる。

# D2XX
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/D2XX/include

export DYLD_LIBRARY_PATH="/usr/local/D2XX/lib:$DYLD_LIBRARY_PATH"

DYLD_LIBRARY_PATHを設定していない場合の実行時エラーは以下の通り。echo $DYLD_LIBRARY_PATHでは.bash_profileで設定したライブラリパスしか確認できない。デフォルトの確認方法は不明。

~ $ test ; exit;
dyld[17390]: Library not loaded: libftd2xx.dylib
  Referenced from: <E59057E2-6B27-3B0F-9FD2-A568CC6B0F5D> test
  Reason: tried: '/opt/homebrew/Cellar/exiv2/0.27.5_1/lib/libftd2xx.dylib' (no such file), '/libftd2xx.dylib' (no such file), 'libftd2xx.dylib' (no such file), 
'/System/Volumes/Preboot/Cryptexes/OSlibftd2xx.dylib' (no such file), 
'libftd2xx.dylib' (no such file), '/usr/local/lib/libftd2xx.dylib' (no such file), 
'/usr/lib/libftd2xx.dylib' (no such file, not in dyld cache), 
'/opt/homebrew/Cellar/exiv2/0.27.5_1/lib/libftd2xx.dylib' (no such file), 
'/libftd2xx.dylib' (no such file), '/Users/xxx/libftd2xx.dylib' (no such file),
 '/System/Volumes/Preboot/Cryptexes/OS/Users/xxx/libftd2xx.dylib' (no such file), 
'/Users/xxx/libftd2xx.dylib' (no such file), '/usr/local/lib/libftd2xx.dylib' (no such file), 
'/usr/lib/libftd2xx.dylib' (no such file, not in dyld cache)
Abort trap: 6
logout