android ndk 编译so动态库的问题

Vieboo韦伯 发布于 2012/08/10 09:29
阅读 8K+
收藏 0

为什么我用ndk的ndk-build编译动态so库的时候,生成的so文件会很大有40kb,同样的c文件和mk文件,我让别人编译了一下才1kb多,而且两个库都可以正常使用。

求大神解答。

加载中
0
xinzaibing
xinzaibing

debug 模式?

有没有添加优化选项

xinzaibing
xinzaibing
ndk的没搞过,不太熟悉。但是应该和GCC差不多,都是在编译命令里指定编译选项和优化参数的。 比如说在GCC编译器里: gcc -g -Wall main.c -o main.out -g就是打开了debug模式的编译选项。 而: gcc -O2 -Wall main.c -o main.out 没有添加-g,默认是非debug模式,而且加了-O2,最高的优化选项 ndk的编译器应该也差不多。
Vieboo韦伯
Vieboo韦伯
弱弱的问一句,在哪里设置开关debug模式,还有怎么添加优化选项,我很新手,谢谢提点。
0
syslight
syslight
可以用readelf -h 看一下是不是有调试信息
0
cut
cut

Application.mk里加,APP_OPTIM := debug就是调试模式,默认情况下eclipse会通过AndroidManifest.xml里的配置设置。

下面是NDK文档里的说明,自己看

APP_OPTIM
    This optional variable can be defined to either 'release' or
    'debug'. This is used to alter the optimization level when
    building your application's modules.

    A 'release' mode is the default, and will generate highly
    optimized binaries. The 'debug' mode will generate un-optimized
    binaries which are much easier to debug.

    Note that if your application is debuggable (i.e. if your manifest
    sets the android:debuggable attribute to "true" in its <application>
    tag), the default will be 'debug' instead of 'release'. This can
    be overridden by setting APP_OPTIM to 'release'.

    Note that it is possible to debug both 'release' and 'debug'
    binaries, but the 'release' builds tend to provide less information
    during debugging sessions: some variables are optimized out and
    can't be inspected, code re-ordering can make stepping through
    the code difficult, stack traces may not be reliable, etc...

如果设置成release还是满足不了你的要求的话,自己去改ndk-build里面的命令,加优化参数上去

0
j
jiazhi.sun

你好,我也遇到了类似的问题。在Linux下MTK提供的环境下编译时生成的SO只有60K,我自己在windows下通过搭配cygwin和ndk然后用eclipse来编译生成的SO有102K。

查了一下发现在Linux下编译时在环境的main.mk中有“TARGET_BUILD_TYPE=release”的定义,而ndk编译的话默认的是“debug”,因此会大很多。

0
flyinghero
flyinghero
是这个理
0
GestureWei
GestureWei
可以考虑用strip,剥离无用代码,能够大大缩减二进制文件的大小
返回顶部
顶部