【问题标题】:How to get ZeroMQ as a 32bit library and merge it with the standard 64bit library?如何获取 ZeroMQ 作为 32 位库并将其与标准 64 位库合并?
【发布时间】:2018-05-09 11:17:48
【问题描述】:

使用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 位版本,我如何创建通用二进制文件以使这些项目仍能正常工作?

【问题讨论】:

    标签: c++ macos zeromq lib


    【解决方案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 仍然有效。

    就是这样!

    【讨论】:

      猜你喜欢
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 2013-10-23
      相关资源
      最近更新 更多