解决在Mac下直接解压C++静态库出现的问题
发布时间 - 2026-01-10 22:07:22 点击率:次发现问题

C++的静态库(*.a文件)就是一个压缩包,把所有 *.o 文件打包在里面。
所以我想尝试做的事很简单:就是把静态库里的 *.o 文件都解压出来,然后在用这些 *.o 文件链接合并为一个动态库。我直接双击解压的,这样就得到了一堆的 *.o 文件。然后我执行了生成动态库的命令,类似如下:
c++ -g -dynamiclib -Wl,-headerpad_max_install_names -o libtest.dylib /usr/lib/libexpat.dylib /usr/lib/libz.dylib -framework ApplicationServices -framework OpenGL *.o
结果一直报错:
ld: file not found: raw_codec.SkRawAdapterCodec.o clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决方法
报错说找不到这个raw_codec.SkRawAdapterCodec.o文件,但是我确定文件是存在的。根据提示加了个-v参数,打印了详细的列表,发现这个raw_codec.SkRawAdapterCodec.o是第一个要加载的文件,说明可能所有文件都没被命令行识别。
我接着测试了其他的命令,单独对这一个raw_codec.SkRawAdapterCodec.o进行链接,不管什么参数都提示 ld: file not found 的错误。看来就是文件无法被加载。然后想着去项目原始目录里找被打包为静态库前的这个 *.o 文件,一测试居然成功了没报错!说明是从静态库里解压出来的 *.o 文件有问题。于是二进制对比两个文件,发现MD5是完全一致的,也就是说文件内容是没问题的。那么就是权限问题咯?把两个文件放到同一个目录下,用ls -l命令查看了一下,输出如下信息:
-rw-r--r-- 1 dom staff 734032 5 25 11:35 raw_codec.SkRawAdapterCodec2.o -rw-r--r--@ 1 dom staff 734032 5 25 10:25 raw_codec.SkRawAdapterCodec.o
下面那个文件是出问题的文件,权限里居然出现了一个@,谷歌了一下,说这个是mac平台上的扩展属性标识,说明除了标准权限外还有其他的。可以用ls -@l命令查看具体是什么扩展属性,输出如下:
-rw-r--r-- 1 dom staff 734032 5 25 11:35 raw_codec.SkRawAdapterCodec2.o -rw-r--r--@ 1 dom staff 734032 5 25 10:25 raw_codec.SkRawAdapterCodec.o com.apple.quarantine 29
这个com.apple.quarantine是什么鬼呢?继续搜索,原来是我们经常看到的那个提示:「”xxx”是从互联网下载的应用程序。您确定要打开它吗?」。算是一种安全限制,在Mac OSX 10.5开始引入了这个属性,如果从浏览器下载,或使用系统的解压命令比如tar,zip等,都会自动给文件加上这个属性,导致第一打开需要弹窗允许。所以我们一直无法加载到这个raw_codec.SkRawAdapterCodec.o是因为它含有com.apple.quarantine扩展属性。
要删除这个属性可以使用命令:
xattr -d com.apple.quarantine 文件名
或者直接删除整个文件夹里所有文件的这个属性:
xattr -dr com.apple.quarantine 文件夹名
测试了一下,删除com.apple.quarantine属性后果然好了。其实更规范的解压静态库的方式是使用ar -x命令,使用ar命令就不会自动添加com.apple.quarantine属性了。可以批量解压一个文件夹下的所有 *.a 文件,在指定目录下执行这条命令即可:
ls *.a | xargs -n1 ar -x
最后测试了一下之前的命令,成功生成了动态库,大功告成~
总结
以上就是关于这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# 静态库解压
# mac
# 解压
# 静态库
# C++静态链接与动态链接详解
# C++静态变量
# 常量的存储位置你真的了解吗
# VisualStudio2019构建C/C++静态库和动态库dll的问题 附源码
# 关于C++静态数据成员的实现讲解
# 用Visual Studio2017写C++静态库图文详解
# C/C++静态类和this指针详解及实例代码
# C++静态成员变量和静态成员函数的使用方法总结
# C++静态持续变量介绍
# 报错
# 其他的
# 是从
# 加载
# 库里
# 我想
# 这一
# 互联网
# 好了
# 看了
# 目录下
# 第一个
# 都没
# 找不到
# 可以用
# 这条
# 很简单
# 大功告成
# 就得
# 因为它
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
如何在腾讯云服务器快速搭建个人网站?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
Laravel怎么为数据库表字段添加索引以优化查询
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
企业网站制作这些问题要关注
如何用搬瓦工VPS快速搭建个人网站?
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
JS经典正则表达式笔试题汇总
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
html如何与html链接_实现多个HTML页面互相链接【互相】
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
LinuxShell函数封装方法_脚本复用设计思路【教程】
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
黑客如何通过漏洞一步步攻陷网站服务器?
javascript中的try catch异常捕获机制用法分析
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
浅谈javascript alert和confirm的美化
如何在阿里云完成域名注册与建站?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
实例解析Array和String方法
如何基于云服务器快速搭建个人网站?
如何用已有域名快速搭建网站?
🚀拖拽式CMS建站能否实现高效与个性化并存?
如何用好域名打造高点击率的自主建站?
如何在阿里云服务器自主搭建网站?
如何在云虚拟主机上快速搭建个人网站?
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
javascript基于原型链的继承及call和apply函数用法分析
Laravel如何处理异常和错误?(Handler示例)
网页设计与网站制作内容,怎样注册网站?
如何构建满足综合性能需求的优质建站方案?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
如何快速建站并高效导出源代码?
JavaScript实现Fly Bird小游戏
如何在服务器上配置二级域名建站?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Python文件异常处理策略_健壮性说明【指导】
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
详解Android图表 MPAndroidChart折线图
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
Linux系统命令中tree命令详解
Win11怎么设置默认图片查看器_Windows11照片应用关联设置

