Androd NDK undefined reference to while linking

For some reason I want to use FreeImage library in my android ndk project ,but while I am building this static library with ndk-build, It compiled the source quite OK, but  failed  during the link step, with the undefined reference to  somefunction error.  

After a lot search I add the LOCAL_ALLOW_UNDEFINED_SYMBOLS=​true  to the Android.mk.

 

But at last this method demonstrate to be a wrong solution for most time, it just give you a false sense of security, because it will  give you a big unsatisfiedLinkError at run time .

 

The really reason for the line error is a order-of-linking problem.


his looks like an order-of-linking issue to me.

Your command line is:

arm-linux-androideabi-g++ -Wl,-soname,libFinal.so -shared \
  libBase.a libFramework.a libGraphics.a libPlatform.a -o libFinal.so

and the error is

libPlatform.a(ATexture.o): In function `ATexture':
ATexture.cpp:9: undefined reference to `TextureRenderer'
ATexture.cpp:9: undefined reference to `TextureRenderer'

TextureRenderer is in Graphics. But libGraphics is before libPlatform on the command line. g++ will search each library on the command line in the order they are given, loading functions to resolve external references. It will read libGraphics once, load the functions that resolve external references and move on to libPlatform.

Try changing LOCAL_STATIC_LIBRARIES := $(MY_LOCAL_STATIC_LIBRARIES) toLOCAL_STATIC_LIBRARIES := Platform Graphics Framework Base and see how you get on

 

http://stackoverflow.com/questions/4765465/android-ndk-two-static-libraries-and-linking

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值