如何将 ZeroMQ 作为 32 位库并将其与标准 64 位库合并?
How to get ZeroMQ as a 32bit library and merge it with the standard 64bit library?
使用 configure/make/install
或自制软件安装 ZeroMQ (v4.2.2) 轻而易举,但只有 64 位版本可用。我尝试了 brew 的 --universal
选项,但它说通用选项不可用,因此该标志被忽略。
$ brew install zmq --universal
Warning: zeromq: this formula has no --universal option so it will be ignored!
因此我的问题是,如何获得 ZeroMQ 的 32 位库版本?
而且,如果我有其他项目仍然需要 64 位版本,我该如何创建一个通用二进制文件以便那些项目仍然可以正常工作?
ZeroMQ 的库文件安装在标准的 /usr/local/lib
位置,但如果使用 brew
安装 ZeroMQ,则会在 /usr/local/Cellar/zeromq/4.2.2/lib
位置创建符号链接。如果查看该目录,您会发现 libzmq.a
和 libzmq.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
文件必须合并以形成通用二进制文件,如您所见 here and here。首先将目录更改为找到 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
仍然有效。
就是这样!
使用 configure/make/install
或自制软件安装 ZeroMQ (v4.2.2) 轻而易举,但只有 64 位版本可用。我尝试了 brew 的 --universal
选项,但它说通用选项不可用,因此该标志被忽略。
$ brew install zmq --universal
Warning: zeromq: this formula has no --universal option so it will be ignored!
因此我的问题是,如何获得 ZeroMQ 的 32 位库版本?
而且,如果我有其他项目仍然需要 64 位版本,我该如何创建一个通用二进制文件以便那些项目仍然可以正常工作?
ZeroMQ 的库文件安装在标准的 /usr/local/lib
位置,但如果使用 brew
安装 ZeroMQ,则会在 /usr/local/Cellar/zeromq/4.2.2/lib
位置创建符号链接。如果查看该目录,您会发现 libzmq.a
和 libzmq.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
文件必须合并以形成通用二进制文件,如您所见 here and here。首先将目录更改为找到 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
仍然有效。
就是这样!