Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为动态库添加Swift包依赖项?

如何为动态库添加Swift包依赖项?
EN

Stack Overflow用户
提问于 2021-07-01 23:56:03
回答 1查看 302关注 0票数 0

我正在尝试迁移一个iOS应用程序来使用Swift包管理器,将框架转换为包。对于我的大多数代码来说,这并不是很简单,我有越来越多的模块和包可以很好地工作。

问题出在依赖于第三方库的模块上。"libA“库只能作为带有C头文件的二进制libA.a使用,并且我已经创建了一个xcframework,我使用binaryTarget通过Package.swift文件将其导入到模块"MyLibA”中。首先将该库转换为xcframework,如下所示:

代码语言:javascript
运行
AI代码解释
复制
    lipo -extract arm64 -output libA_arm_ios/libA.a libA/bin/libA.a
    lipo -extract x86_64 -output libA_x86_ios/libA.a libA/bin/libA.a

    xcodebuild -create-xcframework -libA.a libA_arm_ios/libA.a -library \
        libA_x86_ios/libA.a -headers libA/headers -output libA.xcframework

然后包含在swift包中,如下所示:

代码语言:javascript
运行
AI代码解释
复制
    import PackageDescription
    
    let package = Package(
        name: "MyLibA",
        products: [
            .library(
                name: "MyLibA",
                targets: ["MyLibA"]),
        ],
        dependencies: [
        ],
        targets: [
            .target(
                name: "MyLibA",
                dependencies: ["libA"]),
            .binaryTarget(name: "libA", path: "build/libA.xcframework"),
            .testTarget(
                name: "MyLibATests",
                dependencies: ["MyLibA"]),
        ]
    )

然而,libA反过来依赖于zlib,后者在苹果电脑上以libz.tbd的形式提供。因此,当我添加MyLibA依赖项并尝试运行MyLibATests时,我得到链接器错误

代码语言:javascript
运行
AI代码解释
复制
Undefined symbols for architecture arm64:
  "_zlibVersion", referenced from:
      _libA_method in libA.a(libA_la-version.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

所以问题是,我如何处理这个包中的zlib依赖关系?我是否需要找到/创建一个合适的.a,然后像对libA所做的那样将其包装在xcframework中?有没有更简单的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2021-07-06 15:28:44

哇。太简单了。我已经走上了一条错误的道路,因为我读到了关于必须包装系统库等的内容,因为我一直在学习Swift Package Manager。

zlib是一个系统库,所以我需要做的就是添加

代码语言:javascript
运行
AI代码解释
复制
   .linkedLibrary("z")

在目标的linkerSettings:下:

代码语言:javascript
运行
AI代码解释
复制
    targets: [
        .target(
            name: "MyLibA",
            dependencies: ["libA"]),
            linkerSettings: [
                .linkedLibrary("z")
            ]
        )
     ]

:facepalm:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68218103

复制
相关文章
网络互连设备小结
计算机网络往往由多种不同类型的网络通过特殊的设备相互连接而成,本文简要介绍了转发器、集线器、网桥、桥接器、交换机、路由器等多种网络互连设备的功能原理。
我是东东东
2018/08/01
1.5K0
[功能预告]硬核功能:Excel与SSAS/AzureAS互通互连
如果PowerBIDeskTop是个人用户级别的使用,SSAS/AzureAS就是真正适合企业环境使用的企业级商业智能BI解决方案核心部分。
Excel催化剂
2021/08/19
4890
[功能预告]硬核功能:Excel与SSAS/AzureAS互通互连
Deploy TiDB on GCP GKE (Google Cloud)
how to deploy a TiDB cluster on GCP GKE with your laptop (Linux or macOS) for development or testing
杨漆
2021/01/31
8930
Deploy TiDB on GCP GKE (Google Cloud)
使用 kubeadm 在 GCP 部署 Kubernetes
最近在准备 CKA 考试,所以需要搭建一个 Kubernetes 集群来方便练习.GCP 平台新用户注册送 300 刀体验金,所以就想到用 kubeadm 在 GCP 弄个练练手,既方便又省钱.
用户2443625
2019/01/02
2.3K0
云计算互连的未来
企业将关键任务型应用程序迁移到云平台,需要重新考虑现有的云互连情况。行业专家对云计算互连的未来以及称为互联网设计的新兴模式进行了阐述。
静一
2018/12/18
1.2K0
云计算互连的未来
AT&T将谷歌云融入其NetBond for Cloud平台
AT&T将Google添加到其NetBond for Cloud平台上,允许企业将工作负载安全地转移到Google云平台(GCP)中,作为其多云策略的一部分。 谷歌今年4月推出的合作伙伴互连平台促成了与AT&T的合作,该平台提供与GCP的私有连接,并且能够以高达10 Gb/s的速度访问远程数据中心。 AT&T商业联盟业务发展副总裁Andy Daudelin表示,该运营商一直在等待谷歌提供私有连接平台,然后再与该云计算巨头集成,推动多云战略的发展。将谷歌云平台纳入到多云产品组合中进一步补充了
SDNLAB
2018/06/11
1.1K0
Cumulus,Facebook推动开放数据中心互连
Cumulus Networks表示,它推出了业界首创的转发器抽象接口,为转发器供应商提供更多的互操作性,并使数据中心互连技术更加开放。
SDNLAB
2018/11/22
7070
GCP通过SAC链接windows服务器
由于业务需求,在Google Cloud Platform (GCP)上面开了一台Windows的Computer Engine。跑了一段时间之后,远程桌面无法链接了,但是http等其他服务还是可以正常访问。
行 者
2023/10/20
5660
计算机网络之网络层-网络互连与网络互连设备
采用一类支持异构网络之间协议转换的网络中间设备,来实现 异构网络之间数据分组的转换与转发。 例如:交换机或者是多协议路由器。
越陌度阡
2020/11/26
1.1K0
计算机网络之网络层-网络互连与网络互连设备
修改GCP用户密码并开启root登录
在Google Cloud Platform创建的VM实例只能通过【在浏览器窗口打开】。这里使用其他终端工具连接的设置。 1. 在GCP网页端登录ssh 2. 通过sudo su命令切换到root用户 sudo su //切换到root用户 3. 修改SSH配置文件/etc/ssh/sshd_config vi /etc/ssh/sshd_config //编辑文件 找到PermitRootLogin和PasswordAuthentication # Authentication: LoginGrace
用户1065635
2019/11/27
8.3K0
用TCP/IP进行网际互连 (笔记)
还是要补习基础知识啊。 譬如TCP的状态机转换,我每次都得花很长很长的时间才能反应过来什么时候会进入TIME_WAIT,CLOSE_WAIT…. 譬如一个pcap包,看了很长很长时间才发现是个规避糊涂窗口的Nagle算法… 譬如这本书,每次扫一遍好像都能知道怎么回事,过了段时间就又雾里看花了…. 这次通读一遍,又发现一些有意思的东西,记一下: 底层网络技术回顾 最初的电话系统是面向连接的电路交换,后期(就是现在)的IP网络是基于分组交换的 讲起来很简单,实际上为了实现分组交换网上的通信质量达到电路直接
happy123.me
2018/06/04
1K0
一文搞懂 | Linux互连子系统
该框架旨在提供标准内核接口来控制 SoC 上的互连设置。这些设置可以是多个互连设备或功能块之间的吞吐量、延迟和优先级。这可以动态控制以节省功率或提供最大性能。
刘盼
2021/11/15
1.1K0
【可靠性工程】GCP 可靠性核心原则
Google Cloud Architecture Framework 中的这份文档解释了在云平台上运行可靠服务的一些核心原则。这些原则有助于您在阅读架构框架的其他部分时达成共识,这些部分向您展示了一些 Google Cloud 产品和功能如何支持可靠的服务。
架构师研究会
2022/09/26
7970
【Linux 内核 内存管理】伙伴分配器 ① ( 伙伴分配器引入 | 页块、阶 | 伙伴 )
Linux 内核 初始化 完成之后 , 就会 丢弃 引导内存分配器 , 如 : bootmem 分配器 , memblock 分配器 ;
韩曙亮
2023/03/30
1.1K0
Git 简洁教程:本地项目如何与 GitHub 互连?
Git 是世界上最先进的分布式版本控制系统,简单来说就是帮助个人或者公司团队进行版本控制的一个强大的工具。我们熟知的 Linux 系统就是使用 Git 来进行版本控制的。
红色石头
2022/01/12
1.2K0
Git 简洁教程:本地项目如何与 GitHub 互连?
8.4 伙伴系统
1、伙伴系统(buddy system)是操作系统中用到的另一种动态存储管理方法。
小林C语言
2019/07/12
5000
伙伴系统之伙伴系统概述--Linux内存管理(十五)
在内核初始化完成之后, 内存管理的责任就由伙伴系统来承担. 伙伴系统基于一种相对简单然而令人吃惊的强大算法.
233333
2018/12/27
3.1K0
5G牌照发放,智能互连时代开启
2019年6月10日,工信部向中国电信、中国移动、中国联通、中国广电正式发放5G商用牌照。这是全球5G发展的标志性事件——中国5G时代正式开启。
用户5860209
2019/07/23
3420
5G牌照发放,智能互连时代开启
Python黑帽编程 4.0 网络互连层攻击概述
Python黑帽编程 4.0 网络互连层攻击概述 是时候重新温习下下面这张图了。 图2 本章的内容核心包含上图中的网络层和传输层。TCP/IP是整个网络协议体系中的核心,因为从这里开始,数据传输从局域
用户1631416
2018/04/12
8220
Python黑帽编程 4.0 网络互连层攻击概述
Science:相互连接的大脑的涌现特性
大脑连接不仅仅是大脑区域之间的信号传递。行为和认知通过皮层区域的相互作用而产生。这需要通过紧密连接的网络将本地和远程区域整合在一起。大脑连接决定了大脑的功能结构。活体大脑连接成像为识别认知神经生物学背后的驱动因素提供了机会。物种之间和人类之间的连通性差异进一步加深了对大脑进化和不同认知特征的理解。脑病理通过断开连接放大了这种变异性,从而导致认知功能的解体。长期症状的预测现在优先基于大脑断开。这种思维模式的转变将重塑我们的大脑地图,并挑战现有的大脑模式。
悦影科技
2023/01/04
3160

相似问题

禁用混合合作伙伴互连时出现GCP错误

12

GCP专用互连MTU

113

如何将GCP与Oracle云互连?

214

创建冗余vlan附件,用于与terraform的合作伙伴互连

225

身份验证服务器到服务器GCP互连

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档