首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用CodeSourcery工具链交叉编译PCRE?

用CodeSourcery工具链交叉编译PCRE?
EN

Stack Overflow用户
提问于 2014-03-09 16:52:37
回答 2查看 1.2K关注 0票数 0

我正在尝试使用CodeSourcery编译PCRE这里是我的配置脚本

代码语言:javascript
复制
#!/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上执行该二进制文件时,我得到:

代码语言:javascript
复制
  ./pcregrep: not found

在交叉比较curl、openssl时也有类似的问题,但当我运行测试代码时

代码语言:javascript
复制
#include <stdio.h>

int main(){

   printf("Hell ya it works");
   return 0;
}

并使用以下选项进行编译

代码语言:javascript
复制
arm-none-linux-gnueabi-gcc hello.c -static -o hello.c

它起作用了

EN

回答 2

Stack Overflow用户

发布于 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“。

票数 1
EN

Stack Overflow用户

发布于 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。

但是动态构建的pcrecheck file ./pcregrep如果它是动态链接的,那么

一种最简单的方法是静态编译为hello,例如。然后在你的目标上跑。

否则,将libc从工具链复制到目标,然后将其导出,然后它就可以工作了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22280233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档