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:

扫描二维码关注公众号,回复: 1210347 查看本文章
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

猜你喜欢

转载自liuqzan.iteye.com/blog/1462720