我一直在尝试通过将 libcurl.a 添加到我的 Xcode 7.2 项目来消除对 libcurl.4.dylib 的任何依赖。我构建了一个全新的 libcurl 并将其放在/usr/local/lib 中(标题位于/usr/local/include/curl 中):
export MACOSX_DEPLOYMENT_TARGET="10.8"
./configure --disable-shared --with-darwinssl
make clean
make
make install
但是 .app 仍然与对 libcurl.4.dylib 的依赖关系相关联。找出原因需要几天时间。
虽然我将 libcurl.a 添加到我的 Xcode“将二进制文件与库链接”构建阶段,但 Xcode 生成的 -lcurl 链接命令告诉链接器, 默认情况下,链接到 DYNAMIC 库。链接器不会接受 -static 作为-l 的前缀,因为 CLANG 驱动程序不支持 在每个文件的基础上打开/关闭-static/-dynamic(如果链接器确实看到-static,它期望一切都是静态的——Apple 强烈反对这一点)。
一旦我更改(在 MANUAL shell 链接行中)Xcode 生成的 -lcurl 明确为“/usr/local/lib/libcurl.a”,链接的 .app 不再显示对 libcurl.4 的依赖性。动态库。
糟糕的是,似乎没有简单的方法可以通过 Xcode — 除非我用不同的名称制作 libcurl.a 的拷贝。
也许其他人知道 Xcode 7.2 的“神奇”参数/构建选项,或者有更多见解,但我想把它留在这里,以防其他人遇到 libcurl 的这个问题——或任何其他静态 (.a)在同一位置恰好有同名动态 (.dylib) 的库。
斯蒂芬
编辑:这是我用来构建通用静态库的命令行:
export MACOSX_DEPLOYMENT_TARGET="10.10"
./configure --prefix=$HOME CFLAGS="-arch i386 x86_64" LDFLAGS="-arch i386 x86_64" --disable-shared --with-darwinssl --without-zlib --without-libidn --disable-ldap
make clean
make
sudo make install
最佳答案
我尝试了 SMGreenfield 建议的方法,但它对我不起作用。原因之一:该库无法在通用环境中使用,因为文件 curlbuild.h 因每个体系结构而异。使用此作为来源 https://curl.haxx.se/mail/lib-2015-08/0146.html ,我做了以下事情。还不能做很多测试,但是库编译没有错误“curl_rule_01 declared as an array with negative size”。
- 构建 64 位静态 libcurl:
将 CURL 源文件下载到:/Users/yourname/Libs/。
创建文件夹 /Users/yourname/Libs/curl_64。
在终端中输入:
$ cd /Users/yourname/Libs/curl-7.52.1
$ export MACOSX_DEPLOYMENT_TARGET="10.7"
$ export CFLAGS="-arch x86_64"
$ export LDFLAGS="-arch x86_64"
$ ./configure --prefix=/Users/yourname/Libs/curl_64 --disable-shared -–enable-static --without-libidn –-without-zlib -–disable-ldap
$ make clean
$ make
$ make install
- 构建 32 位静态 libcurl:
创建文件夹 /Users/yourname/Libs/curl_32。
在终端中输入:
$ cd /Users/yourname/Libs/curl-7.52.1
$ export MACOSX_DEPLOYMENT_TARGET="10.7"
$ export CFLAGS="-arch i386"
$ export LDFLAGS="-arch i386"
$ ./configure --prefix=/Users/yourname/Libs/curl_32 --disable-shared –-enable-static --without-libidn –-without-zlib -–disable-ldap
$ make clean
$ make
$ make install
- 创建通用 libcurl:
创建文件夹 /Users/yourname/Libs/curl_universal/lib。
Lipo 两个静态库:
lipo -create /Users/yourname/Libs/curl_32/lib/libcurl.a /Users/yourname/Libs/curl_64/lib/libcurl.a –output /Users/yourname/Libs/curl_universal/libcurl.a
将所有子文件夹从 /Users/yourname/Libs/curl_64 复制到 /Users/yourname/Libs/curl_universal 子文件夹除外 lib!
在文件夹 /Users/yourname/Libs/curl_universal/include/curl 中复制文件 curlbuild.h 并另存为 curlbuild64.h。将此文件从文件夹 /Users/yourname/Libs/curl_32/include/curl 复制到文件夹 /Users/yourname/Libs/curl_universal/include/curl 并将其另存为 <强>curlbuild32.h强>。现在我们应该有三个文件:curlbuild.h、curlbuild64.h 和 curlbuild32.h。
- 打开文件 curlbuild.h 并编辑如下:
关于c++ - 为什么将静态 libcurl.a 添加到 xcode 7.2 示例项目将添加 libcurl.4.dylib 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35566824/