2017-11-25 163 views
1

安裝ZeroMQ(v4.2.2)與configure/make/install或自制軟件都很輕鬆,但只有64位版本可用。我嘗試了brew的--universal選項,但它說一個通用選項不可用,所以標誌被忽略。如何將ZeroMQ作爲32位庫並將其與標準64位庫合併?

$ brew install zmq --universal 
Warning: zeromq: this formula has no --universal option so it will be ignored! 

我的問題是,我該如何獲得一個32位庫版本的ZeroMQ?

而且,如果我還有其他需要64位版本的項目,我該如何創建一個通用二進制文件,以便這些項目仍然可以正常工作?

回答

1

ZeroMQ的庫文件安裝在標準的/usr/local/lib位置,但如果使用brew安裝ZeroMQ,則將創建符號鏈接到/usr/local/Cellar/zeromq/4.2.2/lib位置。如果你看看那個目錄,你會發現libzmq.alibzmq.5.dylib。這兩個文件都是64位,並且必須與32位版本合併。

如果你從他們的網站下載ZeroMQ,您可以按如下改變configure腳本:

./configure CC="gcc -m32" CXX="g++ -m32" --prefix=`pwd`/i32 

CC標誌和CXX標誌告訴腳本配置一個32位版本(see here)。 prefix標誌運行pwd命令來指示配置腳本將文件安裝到當前工作目錄中的用戶i32目錄。 make && make install像往常一樣ZeroMQ,你應該在./i32/lib目錄中有32位庫。您可以重命名這些文件,以反映其32位的性質:

mv ./i32/lib/libzmq.a ./i32/lib/libzmq_i32.a 
mv ./i32/lib/libzmq.5.dylib ./i32/lib/libzmq_i32.5.dylib 

無論是.a.dylib文件必須合併成通用二進制代碼,你可以看到herehere。首先將目錄更改爲找到64位庫的位置,即/usr/local/lib/usr/local/Cellar/zeromq/4.2.2/lib。您可以重命名庫文件,以反映其64位性質:

mv libzmq.a libzmq_i64.a 
mv libzmq.5.dylib libzmq_i64.5.dylib 

合併庫是通過lipo命令:

lipo -create zeromq-4.2.2/i32/lib/libzmq_i32.a libzmq_i64.a -output libzmq.a 
lipo -create zeromq-4.2.2/i32/lib/libzmq_i32.5.dylib libzmq_i64.5.dylib -output libzmq.5.dylib 

注意,符號鏈接libzmq.dylib -> libzmq.5.dylib仍然有效。

就是這樣!