覆盖 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,删除,重新启用,我不想这样做以防将来重新安装某些版本)。
所以我的问题有两个。
- 我想知道是否可以像
$PATH
那样改变 macOS 查找库的方式(我读到一些关于 LD_LIBRARY_PATH
和 DYLD_LIBRARY_PATH
被忽略的内容),并且
- 我应该如何将
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
我认为库的相对路径 (./) 而不是绝对路径是关键。
我正在编译的程序需要新版本的 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,删除,重新启用,我不想这样做以防将来重新安装某些版本)。
所以我的问题有两个。
- 我想知道是否可以像
$PATH
那样改变 macOS 查找库的方式(我读到一些关于LD_LIBRARY_PATH
和DYLD_LIBRARY_PATH
被忽略的内容),并且 - 我应该如何将
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
我认为库的相对路径 (./) 而不是绝对路径是关键。