2017-11-25 111 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仍然有效。

就是这样!