尝试使用XCode 4.3.1在OS X Lion上构建pgmagick
时,我没有取得多大成功。
我使用以下命令(通过自制程序)安装了ImageMagick和GraphicsMagick,以及旁边的提升:
$ brew install graphicsmagick --with-magick-plus-plus
$ brew install imagemagick --with-magick-plus-plus
$ brew install boost --with-thread-unsafe
然后我在https://bitbucket.org/hhatto/pgmagick克隆了回购:
$ hg clone https://bitbucket.org/hhatto/pgmagick/src
$ cd pgmagick
$ python setup.py build
但是我总是收到以下错误:
ld: library not found for -lboost_python
collect2: ld returned 1 exit status
根据stdout上的输出,setup 在适当位置寻找提升(/usr/local/lib
)。
我也尝试了easy_install
和pip
,但没有运气。我正在使用Pythonbrew,但也禁用了它并尝试使用股票python安装 - 仍然没有成功。
有关如何解决问题或进一步诊断问题的任何建议?
答案 0 :(得分:8)
根据我在brew 0.9和OSX 10.6.8中对此问题的再现,问题是--with-thread-unsafe
没有被当前的brew公式文件所尊重。您可以通过使用brew edit boost
检查公式并查看该选项是否出现在公式的内容中来验证这一点。
因此,libboost_python-mt.a
和libboost_python-mt.dylib
正在构建,而不是libboost_python.a
和libboost_python.dylib
。
解决此问题的最简单方法是编辑您的pgmagick setup.py,将boost_lib="boost_python"
替换为boost_lib="boost_python-mt"
(如指出here)或关注the instructions and patch here。这是一个已知问题。
答案 1 :(得分:4)
/ usr / local / lib /中的boost_python lib以libboost_python-mt.a和libboost_python-mt.dylib命名,因为默认编译是支持启用的多线程。
在setup.py中的ELSE条件下grep boost_lib =“boost_python”并将其替换为w / boost_lib =“boost_python-mt”,将修复“未找到”问题。
也可以将“-mt”版本发送到libboost_python.a:如针对linux boost所述here,从1.42开始不再附加'-mt'后缀。
忽略此行或者你可以“with-boost-python = boost_python-mt python setup.py install”。
您可以将'--with-boost-python = boost_python-mt'附加到setup.py中的extra_compile_args,以实现相同的目标。
此外,您可以通过管理环境中的pip安装pgmagick。参考http://rohanradio.com/blog/2011/12/02/installing-pgmagick-on-os-x/
答案 2 :(得分:2)
请注意,截至2014年7月,boost Python库是一个名为boost-python
的独立自制程序包。
5254f8f510fb30484f8fac8be3d38e388a4392e2
Author: Tim D. Smith <git@tim-smith.us>
Date: Sat Jul 19 15:37:25 2014 -0700
Split out Boost.Python
您需要单独安装它才能获得libboost_python
共享库。
答案 3 :(得分:0)
在构建
之前,环境中的DYLD_FALLBACK_LIBRARY_PATH=/usr/local/lib
设置是否有帮助
e.g
$ export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/lib
$ hg clone https://bitbucket.org/hhatto/pgmagick/src
$ cd pgmagick
$ python setup.py build
答案 4 :(得分:0)
我已经submitted a pull request自制了用于构建pgmagick所需的mt和非mt(线程和线程不安全)二进制文件来构建Boost。
原来这是一个相当普遍的问题,在补丁被接受之前,你可以查看或使用我的Boost公式来构建pgmagick。