我一直试图通过在我的Xcode 7.2项目中添加libcurl.a来消除对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“Link Binary with Libraries”构建阶段,但Xcode生成的链接命令-lcurl告诉链接器, 默认情况下,链接到DYNAMIC库。链接器不接受 -static作为-l的前缀,因为CLANG驱动程序不支持 在每个文件的基础上打开/关闭-static / -dynamic(如果链接器确实看到-static,它希望一切都是静态的 - Apple强烈存在的错误)。
一旦我改变了(在MANUAL shell链接行中)Xcode生成的-lcurl显式为“/usr/local/lib/libcurl.a”,链接的.app不再显示对libcurl.4的依赖。 dylib。
看起来没有简单的方法可以解决这个问题 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
答案 0 :(得分:1)
我尝试了SMGreenfield建议的方法,它对我不起作用。其中一个原因是:库不能在通用环境中使用,因为文件 curlbuild.h 对于每个体系结构都是不同的。使用此作为源https://curl.haxx.se/mail/lib-2015-08/0146.html,我做了以下操作。尚未能进行大量测试,但编译时没有错误的库" curl_rule_01声明为负数大小的数组"。
将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
创建文件夹 / 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
创建文件夹 / 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 。