2012-04-22 13 views
1

私はdebian/amd64上にあり、NDK-7bを使ってアンドロイド2.2用のGMPをクロスコンパイルしたいと思います。私は[gmplib](hgクローンhttp://gmplib.org:8000/gmp-5.0 gmp)からソースコードを取得しました。android GMPクロスコンパイル

SUBDIRS = tests mpn mpz mpq mpf printf scanf cxx mpbsd demos tune 

それが思わ:Makefileで以下のように私はSUBDIRSパラメータを更新

/* Define to 1 if you have the `obstack_vprintf' function. */ 
#ifndef ANDROID 
#define HAVE_OBSTACK_VPRINTF 1 
#endif 
/* Define to 1 if you have the `localeconv' function. */ 
#ifndef ANDROID 
#define HAVE_LOCALECONV 1 
#endif 
/* Define to 1 if you have the `vsnprintf' function and it works properly. */ 
#ifndef ANDROID 
#define HAVE_VSNPRINTF 1 
#endif 

:私は設定して、ファイルconfig.hのを修正

./configure --enable-shared --host=arm-linux-androideabi --prefix=/home/fabien/android/spica/ndk-standalone-8 CFLAGS="-v -march=armv5te -mtune=xscale -msoft-float -Wl,-rpath,lib/ -DANDROID -ffunction-sections -funwind-tables -fstack-protector -funswitch-loops -finline-limit=300 -Wall -O3 -nodefaultlibs -fPIC -shared -Wl,--no-allow-shlib-undefined" PKG_CONFIG_PATH="/home/fabien/android/spica/ndk-standalone-8/lib/pkgconfig" LDFLAGS="-Wl,-rpath-link -Wl,/home/fabien/android/spica/ndk-standalone-8/lib -L/home/fabien/android/spica/ndk-standalone-8/lib" 

: は、私はそれを構成しmakeを実行するとコンパイルされます:

libtool: link: (cd ".libs" && rm -f "libgmp.so" && ln -s "libgmp.so.10.0.5" "libgmp.so") 
libtool: link: (cd ".libs" && rm -f "libgmp.la" && ln -s "../libgmp.la" "libgmp.la") 

しかし、 "make check"を実行すると、リンカーが失われているように見えます。

/../../../../arm-linux-androideabi/bin/ld: warning: ld-linux.so.3, needed by /home/fabien/android/spica/sources/gmp/.libs/libgmp.so, not found (try using -rpath or -rpath-link) 
t-bswap.o:(.ARM.exidx.text.main+0x0): undefined reference to `__aeabi_unwind_cpp_pr0' 
./.libs/libtests.a(misc.o):(.ARM.exidx.text.align_pointer+0x0): undefined reference to `__aeabi_unwind_cpp_pr0' 
. 
. 
. 
refmpn.c:(.text.refmpn_get_str+0xb8): undefined reference to `__aeabi_uidiv' 
refmpn.c:(.text.refmpn_get_str+0x238): undefined reference to `__aeabi_ui2d' 
refmpn.c:(.text.refmpn_get_str+0x250): undefined reference to `__aeabi_dmul' 
refmpn.c:(.text.refmpn_get_str+0x254): undefined reference to `__aeabi_d2uiz' 
./.libs/libtests.a(refmpn.o):(.ARM.exidx.text.refmpn_get_str+0x0): undefined reference to `__aeabi_unwind_cpp_pr0' 
/home/fabien/android/spica/sources/gmp/.libs/libgmp.so: undefined reference to `[email protected]_2.4' 
/home/fabien/android/spica/sources/gmp/.libs/libgmp.so: undefined reference to `[email protected]_2.4' 

ヒント?

+0

Fabien R、コンパイルの仕方を正確に把握しましたか?私はAndroid用のGMPもコンパイルしようとしていますが、成功することはありません。あなたの手続きは何かを覚えていますか? –

+0

@NicoBellic:いいえ、最新のNDKで幸運にも幸せになるでしょう。 –

答えて

2

このエラーは、リンカがターゲットを作成するときに、これらのヘルパ関数(これらはGCCヘルパ関数です)を含むファイルが含まれていないためです。これを修正するには、 libgcc.a(GCCヘルパー関数定義を含む)をリンカフラグに追加してください。 GCCバージョンアームのLinux-androideabi-4.4.3と仮定すると、それはこれが関連するように見える次のエラーを(修正されません $NDK_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a

なりのlibgcc.aの位置として

、され行方不明のlibc GNU)に:アンドロイドは

注意のlibc GNUをバイオニックのlibcを使用し、ないよう

.libs/libgmp.so: undefined reference to `[email protected]_2.4' 
.libs/libgmp.so: undefined reference to `[email protected]_2.4' 

上記2つのエラーは常に表示されます:これを私にthodはAndroidだけでなくすべてのシステムで同様の問題を修正します。

+2

私はこの[post](http://stackoverflow.com/questions/5919710/about-arm-eabi-gcc-and-cross-compiling)を見ました。私がNDKスタンドアロンコンパイラを使用しているので、 "-nostdlib LDFLAGSとLIBS = " - lgcc -lm -ldl -lcに" -L/home/fabien/android/spica/ndk-standalone-8/lib/gcc/arm-linux-androideabi/4.4.3 " "しかし、私はこの出力を得ました:arm-linux-androideabi/bin/ld:warning:libm.so.6、... gmp/.libs/libgmp.soが必要です。リンカはld-linux.so.3とlibgcc_s.so.1を見つけられませんでした。さらに、私はこのメッセージを受け取りました:ld:警告:エントリーシンボル_startを見つけることができません。デフォルトは000096cc –

+1

開始シンボルは、実行可能ファイルまたはライブラリであるターゲットに応じて、crtbegin_dynamic.o(実行可能ダイナミックリンク)、crtbegin_static.o(実行可能静的リンク)、crtbegin_so.oダイナミックライブラリ)。 LDの入力の一部として正しいオブジェクトのパスを追加し、_startシンボルエラーをソートしてください。 – Samveen

+1

-nostdlibを-nodefaultlibsに置き換えて、_startシンボルに関するエラーを解決しました。しかし、 "make check"を起動すると、リンカが失われているように見えます。 configureはそれをGNU準拠として認識します。 –