Swift for Android:`ld`在swift中找不到`-lgcc`用于android编译链接步骤

时间:2017-03-30 17:23:12

标签: android swift ubuntu gcc android-ndk

从Unix Stack Exchange迁到此处,我的赏金失败了:

我试图在Ubuntu 16.04 LTS上编译Swift代码,紧跟these instructions之后。我能够下载NDK r14好了,下载libicu工具并构建它们,并下载swift源代码并针对libicu工具构建它。我一路下来编译实际的swift代码并得到这个:

#build.sh 
#(I symlinked the androideabi ld.gold to /usr/bin/ld.armv7, based on a swift bug ticket's advice. Thats the only thing different from the instructions)

/home/mike/workspace/swift-source/build/Ninja-ReleaseAssert/swift-linux-x86_64/bin/swiftc \
-use-ld=armv7 \
-tools-directory /home/mike/workspace/android-ndk-r14/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/bin \
-target armv7-none-linux-androideabi \
-sdk /home/mike/workspace/android-ndk-r14/platforms/android-21/arch-arm \
-L /home/mike/workspace/android-ndk-r14/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a \
-L /home/mike/workspace/android-ndk-r14/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9 \
hello.swift


#output
mike@mike-VirtualBox:~/workspace/HelloSwift$ ./build.sh 
/usr/bin/ld.armv7: error: cannot find -lgcc
/usr/bin/ld.armv7: error: cannot find -lgcc
/usr/bin/ld.armv7: error: cannot find -lgcc
/usr/bin/ld.armv7: error: cannot find -lgcc

我没有太多的经验在这个工具链的下方,但我肯定安装了gcc,gcc-multilib和LD_LIBRARY_PATH设置为帮助ld找到gcc,我重建了使用ldconfig进行ld缓存。

当我运行sudo ldconfig -p | grep gcc时,我得到了

libgccpp.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libgccpp.so.1
libgcc_s.so.1 (libc6,x32) => /usr/libx32/libgcc_s.so.1 
libgcc_s.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgcc_s.so.1
libgcc_s.so.1 (libc6) => /usr/lib32/libgcc_s.so.1

以及其他一些名为libuno_<something with gcc in it>

的内容

1 个答案:

答案 0 :(得分:3)

在最新版本的android-ndk-r14b中,所需gcc库的位置位于:

/path/to/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x

Swift Android文档似乎已经过时,并指向:

/path/to/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9

确保在致电swiftc的过程中链接此正确路径可以解决问题。

(我已提交this pull request以确保没有其他人遇到此问题。)