首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓:针对libstdc++的静态链接

安卓:针对libstdc++的静态链接
EN

Stack Overflow用户
提问于 2010-04-20 04:04:15
回答 1查看 3.6K关注 0票数 1

我的程序在Android上编译得很好,但是当我试图将它复制到Android模拟器时,它给出了以下错误:

代码语言:javascript
复制
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是我编写的一个小脚本,它执行以下操作:

代码语言:javascript
复制
#!/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

下面是我如何构建我的应用程序:

代码语言:javascript
复制
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++或将应用程序链接到仿真器中正确的动态库?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2011-03-16 22:57:59

ndk有一个修改,支持异常、RTTI和stdlibc++。

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

另一种选择就是手工移植你需要的东西。哇!

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

https://stackoverflow.com/questions/2670458

复制
相关文章

相似问题

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