解决在Mac下直接解压C++静态库出现的问题
发现问题 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) 解决方法 报错说找不到这个 我接着测试了其他的命令,单独对这一个 -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平台上的扩展属性标识,说明除了标准权限外还有其他的。可以用 -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 这个 要删除这个属性可以使用命令: xattr -d com.apple.quarantine 文件名 或者直接删除整个文件夹里所有文件的这个属性: xattr -dr com.apple.quarantine 文件夹名 测试了一下,删除 ls *.a | xargs -n1 ar -x 最后测试了一下之前的命令,成功生成了动态库,大功告成~ 总结 以上就是关于这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |