为什么将 static libcurl.a 添加到 xcode 7.2 示例项目中会添加 libcurl.4.dylib 依赖项

2024-04-20

我一直试图通过将 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 链接命令告诉链接器, 默认情况下,链接到动态库。链接器不会接受 -static 作为 -l 的前缀,因为 CLANG 驱动程序不支持 在每个文件的基础上打开/关闭 -static/-dynamic (如果链接器确实看到 -static,则它期望所有内容都是静态的 - Apple 强烈反对)。

一旦我(在手动 shell 链接行中)将 Xcode 生成的 -lcurl 显式更改为“/usr/local/lib/libcurl.a”,链接的 .app 就不再显示对 libcurl.4.dylib 的依赖关系。

糟糕的是,似乎没有简单的方法可以通过 Xcode — 除非我使用不同的名称制作 libcurl.a 的副本。

也许其他人知道 Xcode 7.2 的“神奇”参数/构建选项,或者有更多的见解,但我想将其留在这里,以防其他人遇到 libcurl 或任何其他静态 (.a) 库的问题。碰巧是同一位置的同名动态文件 (.dylib)。

Stephen

编辑:这是我用来构建通用静态库的命令行:

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 建议的方法,但它对我不起作用。原因之一:该库不能在通用环境下使用,因为文件卷曲构建.h每个架构都不同。以此作为来源https://curl.haxx.se/mail/lib-2015-08/0146.html https://curl.haxx.se/mail/lib-2015-08/0146.html,我做了以下事情。还无法进行大量测试,但库编译没有错误”curl_rule_01 声明为负大小的数组".

  1. 构建 64 位静态 libcurl:

下载 CURL 源文件到:/用户/你的名字/库/.

创建文件夹/用户/你的名字/库/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
  1. 构建 32 位静态 libcurl:

创建文件夹/用户/你的名字/库/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
  1. 创建通用 libcurl:

创建文件夹/用户/你的名字/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

复制所有子文件夹/用户/你的名字/库/curl_64 to /用户/你的名字/库/curl_universal 除了子文件夹 lib!

在文件夹中/用户/你的名字/Libs/curl_universal/include/curl复制文件卷曲构建.h并另存为卷曲build64.h。从文件夹中复制此文件/用户/你的名字/Libs/curl_32/include/curl到文件夹/用户/你的名字/Libs/curl_universal/include/curl并将其另存为卷曲构建32.h。现在我们应该有三个文件:卷曲构建.h, 卷曲build64.h, and 卷曲构建32.h.

  1. 打开文件卷曲构建.h并编辑如下:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么将 static libcurl.a 添加到 xcode 7.2 示例项目中会添加 libcurl.4.dylib 依赖项 的相关文章

随机推荐

  • 将 hibernate 投影结果映射到 java POJO 模型

    在过去的几周里 我一直在使用 spring 和 hibernate 并且我一直在那里学习新的东西 现在我有一个问题想用 Hibernate 中的投影来解决 假设有一个模型Person这个模型有很多Car 以下是类定义的大致样子 public
  • 计算机状态(睡眠、休眠、锁定等) Windows 10

    我需要检查当前状态 计算机的 休眠 睡眠 待机锁定等 我只是想问一下如何使用C 获取我的计算机的当前状态 我已经通过检测 LockApp 进程知道计算机何时被锁定 但我无法知道它是否处于睡眠模式或休眠模式 我想尝试一个将使用任务计划程序运行
  • Solr 管理控制台中模式浏览器屏幕中的字段

    上面是特定索引的架构浏览器屏幕的屏幕截图 该字段是品牌 字段类型定义如下
  • 属性“user”在类型“Request>”上不存在

    请帮助 我收到此错误 src app middlewares authentication ts 16 17 error TS2339 Property user does not exist on type Request
  • css 旋转与过渡似乎会影响其他元素的不透明度?

    我遇到了使用 1s 过渡通过 CSS3 变换旋转 DIV 的问题 在 OSX 10 7 5 上的 Chrome 23 和 Safari 6 中 在 rotate divs 转换期间 其他容器中的字体会稍微变暗 关于造成这种情况的原因以及如何
  • 当前位置权限对话框消失得太快

    我的应用程序获取用户位置 获取坐标 并提供往返目的地或出发地的距离 所有这些可能的目的地都显示在表格视图中 因此我在填充表格的同时获取用户坐标 唯一的问题是 询问用户位置的警报视图出现然后消失得如此之快 以至于无法单击它 有什么方法可以在应
  • 使用 openmp 优化 N-queen

    我正在学习 OPENMP 并编写以下代码来解决 n 皇后问题 Full Code https github com Shafaet Codes blob master OPENMP Parallel 20N Queen 20problem
  • 如何调整 CWnd 内 WPF 控件的大小?

    我正在托管 WPFUserControlMFC 内部CWnd 它工作得很好 我现在需要弄清楚如何与其父控件一起调整控件的大小 我已经迷上了OnSize我正在打电话GetWindowRect并将结果设置为我的控件 如下所示 void CChi
  • Spark任务仅在一个执行器上运行

    大家好 首先我知道这个线程的存在 Spark 中的任务仅在一个执行器上运行 https stackoverflow com questions 53425983 task is running on only one executor in
  • 如何在 Angular ui-router 中禁用静态 url?

    我有两个 ui routerstates在我的角度应用程序中 效果很好 如下所示 app config stateProvider function stateProvider stateProvider state settings ur
  • Python..将bin/hex文件转换为txt文件

    我想在python中将bin文件转换为txt文件 with open atb bin rb as file data file read 8 datastring str data print datastring print join s
  • SQL Server 2012 列标识增量在第 7 个条目上从 6 跳到 1000+ [重复]

    这个问题在这里已经有答案了 我有一个奇怪的场景 其中 SQL Server 2012 数据库中的 auto Identity int 列没有正确递增 假设我有一个使用 int auto 标识作为主键的表 它偶尔会跳过增量 例如 1 2 3
  • 在模态和非模态情况下重用 UIViewController

    我有一个 UIViewController 让我们称之为 FormController 它只是一个编辑对象的表单 我想在两种不同的情况下使用它 创建一个新对象 使用 UINavigationController 的presentModalV
  • 离开网站时弹出

    我遇到了 JavaScript 问题 我想要一个脚本 该脚本将在退出整个网站时弹出一条带有问题的消息 如果访问者回答 否 则网页将关闭 如果他回答 是 他将被重定向到另一个页面 我找到了一个例子http www pgrs net 2008
  • xcode CollectionViewController rollToItemAtIndexPath 不工作

    我创建了一个CollectionView控制并用图像填充它 现在我想在开始时滚动到特定索引处的项目 我已经尝试过scrollToItemAtIndexPath如下 self myFullScreenCollectionView scroll
  • 无偏返回 n 个随机正数 (>=0) 的列表,使得它们的总和 == 总和

    我正在寻找一种算法或建议来改进我的代码以生成随机数列表 这些随机数的总和等于某个任意数 对于下面的代码 它总是有偏差 因为第一个数字往往会更高 有没有办法让选号更高效 usr bin python Generate a list of nu
  • 使用 sed 替换 shell 脚本中的特殊字符

    我正在尝试编写一个 shell 脚本 它将替换我使用 sed 选择的任何字符 字符串 我的第一次尝试除了特殊字符之外都有效 我一直在尝试使用 sed 来修复特殊字符 以便它们也能被搜索或替换 我决定简化脚本以进行测试 只处理一个有问题的角色
  • OpenGL:多个顶点的单个顶点属性?

    我有一个接受以下属性的顶点着色器 a posCoord 顶点位置 a texCoord 纹理坐标 传递给片段着色器 a alpha 透明度因子 传递给片段着色器 我正在渲染的对象都是 广告牌 一对直角三角形组成一个矩形 我正在使用一次调用g
  • 使用 TopMost = true 打开 WinForms 表单但不让它抢走焦点?

    我有一个在用户屏幕上弹出的表单 并且有TopMost true 但它抢走了焦点 我怎样才能得到它not当它第一次出现时就抢走了焦点 这对我有用 它提供了 TopMost 但没有焦点窃取 protected override bool Sho
  • 为什么将 static libcurl.a 添加到 xcode 7.2 示例项目中会添加 libcurl.4.dylib 依赖项

    我一直试图通过将 libcurl a 添加到我的 Xcode 7 2 项目来消除对 libcurl 4 dylib 的任何依赖 我构建了一个全新的 libcurl 并将其放置在 usr local lib 中 标头位于 usr local