Android NDK不能交叉编译SQLite - crtend_so.0:没有这样的文件或目录
Android NDK cannot cross compile SQLite - crtend_so.o: No such file or directory
我正在尝试为android平台交叉编译sqlite源。这是env
的配置export NDK=/home/lukassz/android-ndk
export NDK_ROOT=/home/lukassz/android-ndk
export PATH=$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH
export CC=arm-linux-androideabi-gcc
export LD=arm-linux-androideabi-ld
export CPPFLAGS=-I$NDK_ROOT/platforms/android-18/arch-arm/usr/include
export CFLAGS="-nostdlib" LDFLAGS="-Wl,-rpath-link=$NDK_ROOT/platforms/android-18/arch-arm/usr/lib/ -L$NDK_ROOT/platforms/android-18/arch-arm/usr/lib"
export LIBS="-lc"
export CPP=arm-linux-androideabi-cpp
export CC=arm-linux-androideabi-gcc
export CXX=arm-linux-androideabi-g++
export LD=arm-linux-androideabi-ld
export AS=arm-linux-androideabi-as
export AR=arm-linux-androideabi-ar
export RANLIB=arm-linux-androideabi-ranlib
export ANDROID_SYSROOT=$NDK_ROOT/platforms/android-18/arch-arm
export CPPFLAGS="--sysroot=$ANDROID_SYSROOT"
export CFLAGS="--sysroot=$ANDROID_SYSROOT"
export CXXFLAGS="--sysroot=$ANDROID_SYSROOT"
接下来我用
制作./configure
./configure --host=arm-linux-androideabi CC=arm-linux-androideabi-gcc LD=arm-linux-androideabi-ld CPPFLAGS="-I$NDK_ROOT/platforms/android-18/arch-arm/usr/include" CFLAGS="-nostdlib" LDFLAGS="-Wl,-rpath-link=$NDK_ROOT/platforms/android-18/arch-arm/usr/lib/ -L$NDK_ROOT/platforms/android-18/arch-arm/usr/lib" LIBS="-lc"
没有错误,但是当我输入make
时,我得到
libtool: link: arm-linux-androideabi-gcc -shared -fPIC -DPIC .libs/sqlite3.o -L/home/lukassz/android-ndk/platforms/android-18/arch-arm/usr/lib -ldl -lc -Wl,-rpath-link=/home/lukassz/android-ndk/platforms/android-18/arch-arm/usr/lib/ -Wl,-soname -Wl,libsqlite3.so -o .libs/libsqlite3.so
/home/lukassz/android-ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_so.o: No such file or directory
/home/lukassz/android-ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtend_so.o: No such file or directory
collect2: error: ld returned 1 exit status
Makefile:456: recipe for target 'libsqlite3.la' failed
make: *** [libsqlite3.la] Error 1
问题在哪里?
链接器无法找到启动二进制文件,因为您没有给sysroot路径。链接器的命令行也必须包含--sysroot=/path/to/android/sysroot
。那么,-L
选项应该只用于第三方库路径,而不用于系统库路径,因此您应该去掉它。另外,-lc
是完全冗余的,因为默认情况下,普通二进制文件是针对libc链接的。
您可以通过LDFLAGS
传递--sysroot
,就像您在编译步骤中对CFLAGS
所做的那样。但它有点丑。试着仔细阅读./configure --help
。当然应该有明确的方式如何传递路径到sysroot,而不是黑客与*FLAGS
变量。
使用独立的工具链来构建,可以省去很多麻烦。
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 用于交叉编译和CMake的预处理器宏的单元测试
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- 如何交叉编译C++文件
- clang 交叉编译命令找不到头文件
- bitbake-grpc交叉编译/配置失败,错误为c-ares::care引用文件/usr/lib/libcares.s
- 如何从 Linux 交叉编译到 32 位 Windows 可执行文件
- Jetson 工具链文件夹结构和交叉编译时的 libgomp 链接器错误
- 针对 QNX 交叉编译后,boost 文件系统 (1.63) 失败并出现未定义的引用错误
- 交叉编译时的文件大小差异
- 交叉编译用于树莓派的QT应用程序-无法打开共享对象文件
- C++交叉编译不处理换行输入文本文件
- 在 Ubuntu 上使用 Mingw64 交叉编译 Matlab oct 文件时出现问题
- 为什么在交叉编译时不 cmake CMAKE_FIND_ROOT_PATH 和 CMAKE_INCLUDE_PATH 覆盖我的根文件系统?
- Android NDK不能交叉编译SQLite - crtend_so.0:没有这样的文件或目录
- 如何将Flash SWF文件交叉编译成Keil可编译的C/ c++文件
- 使用Qt ARM预编译二进制文件进行交叉编译
- Linux mingw32-sfml对windows进行交叉编译-缺少dll文件
- 试图在目标设备上运行一个交叉编译的可执行文件失败,出现以下错误:
- 如何从windows g++ cygwin交叉编译得到linux可执行文件