2012-03-20 85 views
7

尝试在OS X Lion上使用XCode 4.3.1构建pgmagick时,我并没有获得太大的成功。如何在OS X上的pythonbrew下构建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上的输出,设置在正确的地方寻找提升(/usr/local/lib)。

我也试过easy_installpip但没有运气。我使用Pythonbrew,但也禁用了这一点,并尝试使用股票python安装 - 仍然没有成功。

有关如何解决问题或进一步诊断问题的任何建议?

+0

Lion是否附带Python 2.7?尝试brew编辑提升s.t. bootstrap.sh用'--python-version = 2.6'调用。 – 2012-03-22 13:59:13

+0

@PauloScardine boost.rb中没有'--python-version = 2.6'。 – 2012-03-22 14:08:48

+0

等一下:您是以非特权用户身份执行此操作。出于好奇,你的安装目标是否被误入了'〜/ .pythonbrew'? – MrGomez 2012-03-23 19:52:46

回答

8

根据我自己在brew 0.9和OSX 10.6.8中再现这个问题,问题是--with-thread-unsafe没有被当前的brew公式文件所尊敬。您可以通过检查公式brew edit boost并查看该选项是否出现在公式的内容中进行验证。

因此,libboost_python-mt.alibboost_python-mt.dylib正在建造,而不是libboost_python.alibboost_python.dylib

解决这个问题的最简单的方法是编辑您的pgmagick setup.py与boost_lib="boost_python-mt"取代boost_lib="boost_python"(如指出here)或遵循the instructions and patch here。这是另一个已知的问题。

+0

我没有触及'setup.py'文件,而是从[github pull request](https://github.com/mxcl/homebrew/pull/8928)中应用了这个补丁,它似乎已经工作了( 'import pgmagick'不会抛出错误,但还没有使用它) – 2012-03-27 13:21:54

+1

@unpluggd它不应该这样做的区别在于第通过brew来安装读取不安全的boost,这可能只会导致那些依赖于多线程部分boost的程序(所有线程相关操作将被替换为无操作)。对于那些不需要多线程的程序,这两个版本都可以。 – okm 2012-03-27 13:48:12

+0

@unpluggd我很好奇,但:它工作? – MrGomez 2012-03-29 16:48:22

0

是否构建

之前设置环境帮助DYLD_FALLBACK_LIBRARY_PATH=/usr/local/lib

$ export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/lib 
$ hg clone https://bitbucket.org/hhatto/pgmagick/src 
$ cd pgmagick 
$ python setup.py build 
+0

不好,不幸的是不是 - 同样的错误。 – 2012-03-23 15:33:39

4

的boost_python LIB里面的/ usr/local/lib目录libboost_python-mt.a和libboost_python-MT之后被命名为/。 dylib,因为默认编译是支持启用的多线程。

grep boost_lib =“boost_python”在setup.py中的ELSE条件下并将其替换为w/boost_lib =“boost_python-mt”,将修复“not found”问题。

此外,可以将“-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在受管env中安装pgmagick。 Refs http://rohanradio.com/blog/2011/12/02/installing-pgmagick-on-os-x/

+0

而且,如勘误中所述:'--with-thread-unsafe'被'brew'中当前的boost文件忽略。预期的行为是产生'libboost_python.a',而不是'libboost_python-mt.a'。好的建议,但! – MrGomez 2012-03-26 20:50:43

+1

...虽然,我在我的盒子上试过这个程序,但它不起作用。 – MrGomez 2012-03-26 21:00:10

+0

@MrGomez什么是错误?我没有在OSX 10.6.8上测试它。在10.7瓦特/更新酿造,_pgmagick.so生成和运作良好。 – okm 2012-03-27 01:06:08

0

我已经submitted a pull request自制软件来构建boost和mt和非mt(线程和线程不安全)二进制文件,这是构建pgmagick所必需的。

原来这是一个相当普遍的问题,直到补丁被接受,你可以检出或使用我的公式Boost来构建pgmagick。

2

请注意,截至2014年7月,提升Python库是一个独立的自制软件包,名为boost-python

5254f8f510fb30484f8fac8be3d38e388a4392e2 
Author: Tim D. Smith <[email protected]> 
Date: Sat Jul 19 15:37:25 2014 -0700 

    Split out Boost.Python 

您需要单独安装以获取libboost_python共享库。

+0

'brew instal boost-python'在我的机器上解决了这个错误。我正在运行Mac 10.9 – kilojoules 2015-06-03 15:37:58