gpt4 book ai didi

ios - 错误 : ld: warning: ignoring file libfile01. a,文件是为存档而构建的,该存档不是正在链接的架构 (armv7) : libfile01. a

转载 作者:行者123 更新时间:2023-12-03 19:49:26 26 4
gpt4 key购买 nike

我正在尝试编译一个用C语言为iOS设备开发的项目。它使用自定义库文件 libcurl、libcrypto、libssl 和 libpthread。我已经成功地为 Mac OS X 编译了它,但在为 iOS 编译它时遇到了问题。另外,我尝试在网上找到的任何帮助都更多是 Xcode GUI 帮助,并且我需要命令行帮助。需要通过命令而不是Xcode GUI来编译它。

首先需要编译几个 C 文件,然后从这些编译文件中生成一个静态库文件,在编译 native 二进制文件时进一步使用该文件。

<小时/>

这就是我从 file01 内的 c 文件生成 iOS arm ouptut 文件的方法:

将 iphoneos sdk 路径存储在环境变量中:

CC="$(xcrun --sdk iphoneos9.2 --find clang) -isysroot $(xcrun --sdk iphoneos9.2 --show-sdk-path) -arch armv7 -arch armv7s -arch arm64 -arch armv6 -arch arm64"

使用命令编译file01中的c文件:$CC -c -O2 *.c

要检查这些文件是为哪个架构师编译的,可以使用此 lipo 命令进行检查。示例:

$ lipo -info example_file01.o 
Architectures in the fat file: example_file01.o are: armv7 armv7s armv6 arm64

要制作静态库文件,我可以使用命令获取 iOS ar 文件路径:

$ xcrun --sdk iphoneos9.2 --find ar /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar

我可以将路径存储在环境变量中,但它不起作用,抛出无法识别 ar 命令参数 rcu 的错误。因此,使用 ar 路径来使用以下命令创建库文件:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar rcu ../output/libfile01.a *.o

如果检查此 lib 文件支持哪些架构,则会给出以下输出:

$ lipo -info ../output/libfile01.a 
fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: archive with no architecture specification: ../output/libfile01.a (can't determine architecture for it)

但是,它应该给出与此类似的输出:

$ lipo -info ../ios/lib/libcurl.a 
Architectures in the fat file: ../ios/lib/libcurl.a are: i386 armv7 armv7s x86_64 arm64

尝试使用生成的静态 lib 文件与命令编译文件时,这会导致错误:

$CC -o ../output/FinalProjectFile -O2 *.c ../output/libfile01.a ../ios/lib/libcurl.a ../ios/lib/libssl.a ../ios/lib/libcrypto.a -lpthread -lm

Error: ​ld: warning: ignoring file ../output/libfile01.a, file was built for archive which is not the architecture being linked (armv7): ../output/libfile01.a​

感谢帮助

最佳答案

我最终通过对 ar 使用不同的参数解决了这个问题。

而不是使用

$ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar rcu ../output/libfile01.a *.o

已使用

$ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar -rcs ../output/libfile01.a *.o

唯一的区别是它是 -rcs 而不是 rcu

当检查此 libfile 的信息时,它显示如下输出:

$ lipo -info ../output/libfile01.a 
Architectures in the fat file: ../output/libfile01.a are: armv7 armv7s armv6 arm64

关于ios - 错误 : ld: warning: ignoring file libfile01. a,文件是为存档而构建的,该存档不是正在链接的架构 (armv7) : libfile01. a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34844932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com