使用自定义liblzma.dylib库构建bsdtar

时间:2018-04-26 08:45:15

标签: makefile cmake dylib bsdtar

可能是一件非常明显的事情,但我仍然在努力构建使用 liblzma.dylib 的自定义构建版本的 bsdtar ,所以我可以一起分享bsdtar二进制文件和liblzma.dylib库。

感谢Tsyvarev comment,我正在使用自定义dylib构建bsdtar,只需调用:

cmake -DCMAKE_PREFIX_PATH=customlib

不再需要使用FIND_PACKAGE(liblzma HINTS customlib customlib/include)或类似内容。在cmake过程中,输出如下所示:

-- Looking for lzma_auto_decoder in /libarchive-3.3.2/customlib/liblzma.dylib
-- Looking for lzma_auto_decoder in /libarchive-3.3.2/customlib/liblzma.dylib - found
-- Looking for lzma_easy_encoder in /libarchive-3.3.2/customlib/liblzma.dylib
-- Looking for lzma_easy_encoder in /libarchive-3.3.2/customlib/liblzma.dylib - found
-- Looking for lzma_lzma_preset in /libarchive-3.3.2/customlib/liblzma.dylib
-- Looking for lzma_lzma_preset in /libarchive-3.3.2/customlib/liblzma.dylib - found
-- Found LibLZMA: /libarchive-3.3.2/customlib/include (found version "5.2.3")

无论如何,bsdtar的最终版本仍然会查找系统dylib,而不是自定义系统:

aone$ otool -L libarchive-3.3.2/bin/bsdtar 
libarchive-3.3.2/bin/bsdtar:
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /usr/lib/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.5)
    /usr/local/lib/liblzma.5.dylib (compatibility version 8.0.0, current version 8.3.0)
    ...

customlib 文件夹包含 liblzma.5.dylib ,它的别名 liblzma.dylib liblzma.a 即可。文件夹 customlib / import 包含 lzma.h lzma 文件夹以及其余标题。

任何人都知道如何正确地做到这一点?提前谢谢。

在这里问到:https://github.com/libarchive/libarchive/issues/1014

1 个答案:

答案 0 :(得分:0)

最后使用 install_name_tool man)进行编译:

install_name_tool -change "/usr/local/lib/liblzma.5.dylib" "customlib/liblzma.dylib" bsdtar