Android: статически ссылка на libstdc ++ - PullRequest
1 голос
/ 20 апреля 2010

моя программа прекрасно компилируется для Android, однако, когда я пытаюсь скопировать ее в эмулятор Android, выдается следующая ошибка:

knight666@Katja-Linux /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 - это небольшой скрипт, который я написал, который выполняет следующее:

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

Вот как я строю свое приложение:

oem@androiddev /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

Разрывы строк приведены только для ясности, в реальном выводе их нет.

YoghurtGum - моя игровая библиотека, которая уже статически и динамически связывается с libstdc++.

Когда я удаляю lstdc++, программа не компилируется, потому что не может найти библиотеку.

Есть ли способ статически связать stdlibc++ или связать приложение с правильной динамической библиотекой в ​​эмуляторе?

Заранее спасибо.

1 Ответ

0 голосов
/ 16 марта 2011

Существует модификация ndk с поддержкой исключений, RTTI и stdlibc ++.

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

Другая альтернатива - переносить то, что вам нужно, вручную ... eek!

...