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

Overriding MacOS High Sierra /usr/lib (or how to static link)

我正在编译的程序需要新版本的 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目录里的libcurl是正确的,但是好像是想用/usr/lib版本的,删不掉(不禁用 SIP,删除,重新启用,我不想这样做以防将来重新安装某些版本)。

所以我的问题有两个。

  1. 我想知道是否可以像 $PATH 那样改变 macOS 查找库的方式(我读到一些关于 LD_LIBRARY_PATHDYLD_LIBRARY_PATH 被忽略的内容),并且
  2. 我应该如何将 gcc 行重做为静态 link 那些库?

这在将库复制到 /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

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