0

ここでコンパイルしようとしPCRECodeSourcery いるのは私の構成スクリプトです

#!/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

できます

4

2 に答える 2

1

Android で Linux コンパイラを使用しようとしています。AndroidLinux であるため、完全に壊れているわけではありませんが、Android には同じライブラリ セットが標準で付属していません。

Linux ライブラリを (適切な CodeSourcery libc ディレクトリから) インストールすることはおそらく可能ですが、Android ファイルは既に標準の場所にあるため、これは難しいプロセスです。あなたが何をしているのかわからないので、恐ろしい混乱に陥ります。

最善の解決策は、おそらく完全に静的なリンクを使用することです。そうは言っても、静的にリンクされていても、ホストシステムの DNS ライブラリに接続できる必要があるため、libcurl が不満であることに気付くかもしれませdlopenん。Android がそれをどのように行うのが好きかはわかりません。

GNU/Linuxの「Glibc」ではなく、Androidの「Bionic」Cライブラリを使用するように設計された専用のAndroidツールチェーン(Linaroがそうしていると思います)を手に入れることをお勧めします。

于 2014-03-10T09:50:17.163 に答える
0

code-sourcery tool-chain の libc とターゲット rootfs にある libc の不一致です。ホスト クロス コンパイラの libc とデバイスの rootfs にデプロイされたものが異なります

arm-none-linux-gnueabi-gcc hello.c -static -o hello.c

それは動作します `

これは静的にコンパイルするため機能するため、ここで libc をターゲットにコピーする必要はありません。

しかし、pcreあなたは動的に構築しました。check file ./pcregrep動的にリンクされている場合

hello として静的にコンパイルする最も簡単な方法の 1 つです。ターゲットで実行します。

それ以外の場合は、libc をツール チェーンからターゲットにコピーしてエクスポートすると、機能します。

于 2014-03-09T10:13:36.803 に答える