Error: ld: warning: ignoring file libfile01.a, file was built for archive which is not the architecture being linked (armv7): libfile01.a
Error: ld: warning: ignoring file libfile01.a, file was built for archive which is not the architecture being linked (armv7): libfile01.a
我正在尝试为 iOS 设备编译一个用 C 语言开发的项目。它使用自定义库文件、libcurl、libcrypto、libssl 和 libpthread。我已经成功地为 Mac OS X 编译了它,但是在为 iOS 编译它时遇到了问题。此外,我尝试在网上找到的任何帮助更多的是 Xcode GUI 帮助,我需要命令行帮助。需要通过命令而不是 Xcode GUI 来编译它。
首先需要编译几个C文件,然后将这些编译后的文件制作成一个静态库文件,在编译原生二进制文件时进一步使用。
这就是我从 file01 中的 c 文件生成 iOS arm 输出文件的方式:
将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 设备编译一个用 C 语言开发的项目。它使用自定义库文件、libcurl、libcrypto、libssl 和 libpthread。我已经成功地为 Mac OS X 编译了它,但是在为 iOS 编译它时遇到了问题。此外,我尝试在网上找到的任何帮助更多的是 Xcode GUI 帮助,我需要命令行帮助。需要通过命令而不是 Xcode GUI 来编译它。
首先需要编译几个C文件,然后将这些编译后的文件制作成一个静态库文件,在编译原生二进制文件时进一步使用。
这就是我从 file01 中的 c 文件生成 iOS arm 输出文件的方式:
将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