2010-04-19 4 views
1

mon programme compile bien pour Android, mais lorsque je tente de le copier dans l'émulateur Android, il donne l'erreur suivante:Android: lien statiquement contre libstdC++

[email protected] /media/Data/Shared/Galaxians $ acpy Galaxians.android 
Filename: 'Galaxians.android' 
819 KB/s (420657 bytes in 0.501s) 
link_image[1638]: 825 could not load needed library 'libstdc++.so.6' for '/system/sbin/Galaxians.android' (load_library[984]: Library 'libstdc++.so.6' not found)CANNOT LINK EXECUTABLE 

acpy est un petit script que j'ai écrit cela ne ce qui suit:

#!/bin/sh 

FILEPATH=`dirname $1` 
FILENAME=`basename $1 .c` 

echo "Filename: '$FILENAME'" 

adb push $FILEPATH/$FILENAME /system/sbin/$FILENAME 
adb shell chmod 777 /system/sbin/$FILENAME 
adb shell /system/sbin/$FILENAME 

Voici comment je construis ma demande:

[email protected] /media/YoghurtGum/Tests/Galaxians $ sudo make 
arm-none-linux-gnueabi-g++ -static-libgcc -g -Wall -Werror -O2 -w -I ../../YoghurtGum/src/GLES -I ../../YoghurtGum/src -c src/Alien.cpp -o intermediate/Alien.o 
arm-none-linux-gnueabi-g++ -static-libgcc -g -Wall -Werror -O2 -w -I ../../YoghurtGum/src/GLES -I ../../YoghurtGum/src -c src/Bullet.cpp -o intermediate/Bullet.o 
arm-none-linux-gnueabi-g++ -static-libgcc -g -Wall -Werror -O2 -w -I ../../YoghurtGum/src/GLES -I ../../YoghurtGum/src -c src/Game.cpp -o intermediate/Game.o 
arm-none-linux-gnueabi-g++ -static-libgcc -g -Wall -Werror -O2 -w -I ../../YoghurtGum/src/GLES -I ../../YoghurtGum/src -c src/Player.cpp -o intermediate/Player.o 

arm-none-linux-gnueabi-gcc 
-Wl,--entry=main, 
-dynamic-linker=/system/bin/linker, 
-rpath-link=/home/oem/android-ndk-r3/build/platforms/android-5/arch-arm/usr/lib, 
-rpath=../../YoghurtGum/lib/Android, 
-L/home/oem/android-ndk-r3/build/platforms/android-5/arch-arm/usr/lib 
-nostdlib 
-lstdc++ 
intermediate/Alien.o 
intermediate/Bullet.o 
intermediate/Game.o 
intermediate/Player.o 
../../YoghurtGum/lib/Android/libstdc++.a 
../../YoghurtGum/bin/YoghurtGum.a 
-o bin/Galaxians.android 

Les sauts de ligne sont seulement pour la clarté, aucun n'existe dans la sortie réelle. YoghurtGum est ma bibliothèque de jeu qui lie déjà statiquement et dynamiquement à libstdc++.

Lorsque je supprime lstdc++, le programme ne compile pas car il ne trouve pas la bibliothèque.

Y at-il un moyen de lier à stdlibc++ statiquement ou de lier l'application à la bibliothèque dynamique correcte dans l'émulateur?

Merci d'avance.

Répondre

0

Il existe une modification du ndk avec prise en charge des exceptions, RTTI et stdlibC++.

http://www.crystax.net/android/ndk-r3.php

L'autre alternative consiste à le portage tout ce que vous avez besoin, à la main ... eek!

+0

Merci pour la réponse, mais je l'ai compris l'année dernière. ;) Crystax était la réponse, mais il a des problèmes en soi. C'est une version de retard (le NDK officiel est à r5, Crystax à r4) et ce n'est pas bien documenté. – knight666

+0

Oups! : P En tout cas, bon à savoir :) –

Questions connexes