2012-03-20 80 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