代码之家  ›  专栏  ›  技术社区  ›  John Smith

覆盖MacOS High Sierra/usr/lib(或如何静态链接)

  •  0
  • John Smith  · 技术社区  · 7 年前

    我有一个正在编译的程序,它需要新版本的Curl。Mac默认Curl位于/usr/bin和/usr/lib中。我已编译了较新版本的curl,并使用以下方法进行编译:

    gcc mypgm.c -I ./curl-7.58.0/include/curl -I ./cJSON-master -L ./cJSON-master/build ./libcjson.1.7.1.dylib ./libcurl.4.dylib -o mypgm
    

    当我运行mypgm时,我得到一个错误:

    Incompatible library version: mypgm requires version 10.0.0 or later, but libcurl.4.dylib provides version 7.0.0
    

    跑步 otool 我发现我的build dir中的libcurl是正确的,但它似乎想要使用/usr/lib版本,它不能被删除(如果不禁用SIP、delete、reenable,我就不想这样做,以防将来的版本重新安装)。

    所以我的问题是双重的。

    1. 我想知道是否有可能 $PATH 为了改变macOS查找库的方式(我读了一些关于 LD_LIBRARY_PATH DYLD_LIBRARY_PATH 被忽略),以及
    2. 我应该如何重做 gcc 行到静态链接那些库?
    1 回复  |  直到 6 年前
        1
  •  0
  •   John Smith    7 年前

    在将库复制到/usr/local/lib文件夹后,这就起到了作用。

    gcc -I ./curl-7.58.0/include/curl -I ./cJSON-master /usr/local/lib/libcjson.1.7.1.dylib /usr/local/lib/libcurl.4.dylib mypgm.c -o mypgm
    

    我认为库的相对路径(./)而不是绝对路径是关键。