我正在尝试使用CodeSourcery编译PCRE这里是我的配置脚本
#!/bin/bash
PROJECT_BASE=$(pwd);
PROJECT_REPOSITORY=$PROJECT_BASE/download
INSTALL_PREFIX=$PROJECT_BASE/compiled/armv5te
mkdir -p $INSTALL_PREFIX && mkdir -p $PROJECT_BASE/download && mkdir -p $PROJECT_BASE/build
export TOOL_PREFIX=${HOME}/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux
SYSROOT=$HOME/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/arm-none-linux-gnueabi/libc
export CC="${TOOL_PREFIX}/bin/arm-none-linux-gnueabi-gcc --sysroot=$SYSROOT"
export CXX="${TOOL_PREFIX}/bin/arm-none-linux-gnueabi-g++ --sysroot=$SYSROOT"
#CC="${TOOL_PREFIX}/bin/arm-none-linux-gnueabi-gcc"
#CXX="${TOOL_PREFIX}/bin/arm-none-linux-gnueabi-g++"
export AR="${TOOL_PREFIX}/bin/arm-none-linux-gnueabi-ar"
export RANLIB="${TOOL_PREFIX}/bin/arm-none-linux-gnueabi-ranlib"
export LD="${TOOL_PREFIX}/bin/arm-none-linux-gnueabi-ld"
export STRIP="${TOOL_PREFIX}/bin/arm-none-linux-gnueabi-strip"
export NM="${TOOL_PREFIX}/bin/arm-none-linux-gnueabi-nm"
export CCLD=$LD
export CHOST=arm-none-linux-gnueabi
PARENT_DIR=$(pwd);
cd $PROJECT_BASE/build && tar -xzvf $PROJECT_REPOSITORY/pcre-8.34.tar.gz && cd ./pcre-8.34
#LDFLAGS_DEP="-lc"
#CPPFLAGS="-I${INSTALL_PREFIX}/include"
# CFLAGS="-march=armv5t -marm -mlittle-endian -mglibc -static -I${INSTALL_PREFIX}/include"
LDFLAGS="-L${INSTALL_PREFIX}/lib"
./configure --prefix=$INSTALL_PREFIX/pcre --with-sysroot --target=arm-none-linux-gnueabi --host=x86_64 && make && make install;
cd -;
cd ${PARENT_DIR};现在它已成功编译,但当我尝试在android上执行该二进制文件时,我得到:
./pcregrep: not found在交叉比较curl、openssl时也有类似的问题,但当我运行测试代码时
#include <stdio.h>
int main(){
printf("Hell ya it works");
return 0;
}并使用以下选项进行编译
arm-none-linux-gnueabi-gcc hello.c -static -o hello.c它起作用了
发布于 2014-03-10 17:50:17
您正在尝试将Linux编译器与Android一起使用。它并没有完全崩溃,因为Android是Linux,但Android并没有提供与标准相同的库。
安装Linux库(从适当的Android libc目录)可能是可能的,但这是一个棘手的过程,因为CodeSourcery文件已经在标准位置,所以它们必须以某种方式安装在一边,如果你不知道自己在做什么,它将会陷入可怕的混乱。
最好的解决方案可能是完全使用静态链接。也就是说,你可能仍然会发现libcurl并不满意,因为即使是静态链接,它也需要能够dlopen主机系统的DNS库,而我不知道Android是如何做到这一点的。
我建议你尝试获得一个专门构建的Android工具链(我相信Linaro做了一个),它被设计为使用Android的“仿生”C库,而不是GNU/Linux的"Glibc“。
发布于 2014-03-09 18:13:37
code-sourcery工具链的libc与目标rootfs中的libc不匹配。libc在主机上的交叉编译和部署在设备上的rootfs是不同的
arm-none-linux-gnueabi-gcc hello.c -static -o hello.c
它工作了`
这是因为你是静态编译的,所以这里不需要把libc复制到target。
但是动态构建的pcre。check file ./pcregrep如果它是动态链接的,那么
一种最简单的方法是静态编译为hello,例如。然后在你的目标上跑。
否则,将libc从工具链复制到目标,然后将其导出,然后它就可以工作了
https://stackoverflow.com/questions/22280233
复制相似问题