使用Homebrew安装
这个方式最简单,但是一般都是安装的最新版:
brew install swig
如果按照特定版本,需要看一个当前支持的列表:
brew search swig
brew install swig@3
源码编译安装
swig依赖pcre库,需要先安装pcre
安装pcre
下载链接:https://github.com/PhilipHazel/pcre2/releases
当前最新版本:
安装步骤:
cd pcre2-10.40
./configure
make && make install
make -k check
最终会安装到/usr/local
目录。
安装swig
我这里需要的版本是4.0.2。
下载链接:https://www.swig.org/download.html
点击All releases
,选择自己所需版本下载。
安装步骤:
./configure
make
sudo make install
最终会安装到/usr/local
目录。
遇到的问题
找不到libpcre.1.dylib
错误表现:
dyld[67898]: Library not loaded: @rpath/libpcre.1.dylib
Referenced from: <DE94F1C3-29F0-37BE-B92A-4C8087B41161> /usr/local/bin/swig
Reason: no LC_RPATH's found
查看swig需要链接的动态库pcre:
otool -l swig | grep pcre
name @rpath/libpcre.1.dylib (offset 24)
这里pcre使用rpath (用于指定可执行文件或共享库在运行时查找依赖项的路径),我们知道pcre安装在/usr/local/lib目录下,所以解决方案:
sudo install_name_tool -add_rpath /usr/local/lib /usr/local/bin/swig
找不到libc++.1.dylib
错误表现一致:
dyld[71045]: Library not loaded: @rpath/libc++.1.dylib
Referenced from: <DE94F1C3-29F0-37BE-B92A-4C8087B41161> /usr/local/bin/swig
Reason: tried: '/usr/local/lib/libc++.1.dylib' (no such file),
'/usr/local/lib/libc++.1.dylib' (no such file),
'/System/Volumes/Preboot/Cryptexes/OS/usr/local/lib/libc++.1.dylib' (no such file),
'/usr/local/lib/libc++.1.dylib' (no such file),
'/System/Volumes/Preboot/Cryptexes/OS/usr/local/lib/libc++.1.dylib' (no such file)
查看swig需要链接的动态库pcre:
name @rpath/libc++.1.dylib (offset 24)
也是使用rpath,但是在/usr/local/lib目录下确实没有libc++。
之后,搜索了一下libc++的库:
find /usr -name "libc++.1.dylib"
发现之前安装anaconda3的时候有:
/usr/local/anaconda3/lib/libc++.1.dylib
所以可以改一下swig这里的链接:
sudo install_name_tool -change "@rpath/libc++.1.dylib" "/usr/local/anaconda3/lib/libc++.1.dylib" /usr/local/bin/swig
这样之后大工搞成。
验证
-> ~ swig -version
SWIG Version 4.0.2
Compiled with g++ [x86_64-apple-darwin23.0.0]
Configured options: +pcre
Please see http://www.swig.org for reporting bugs and further information