1

I get this in my build output (filter_setup() is defined in ./obj/local/armeabi-v7a/libmyapp-dsp.a which you can see in the linker output. Why is filter_setup an undefined reference?

NOTE: I'm using the Android NDK, but at this point this is a general linker question.

/Applications/SDK/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/arm-linux-androideabi-g++ -Wl,-soname,libapplication.so -shared --sysroot=/Applications/SDK/android-ndk-r8d/platforms/android-8/arch-arm ./obj/local/armeabi-v7a/objs-debug/application/src/broov_gui.o ./obj/local/armeabi-v7a/objs-debug/application/src/broov_player.o ./obj/local/armeabi-v7a/objs-debug/application/src/native_main.o ./obj/local/armeabi-v7a/objs-debug/application/src/video_player.o ./obj/local/armeabi-v7a/objs-debug/application/src/b_sdl.o ./obj/local/armeabi-v7a/objs-debug/application/src/broov_font.o ./obj/local/armeabi-v7a/objs-debug/application/src/broov_queue.o ./obj/local/armeabi-v7a/objs-debug/application/src/ffplay.o ./obj/local/armeabi-v7a/objs-debug/application/src/optimization.o ./obj/local/armeabi-v7a/objs-debug/application/src/subreader.o ./obj/local/armeabi-v7a/objs-debug/application/src/universalchardet.o ./obj/local/armeabi-v7a/objs-debug/application/resources/bg_loading.o ./obj/local/armeabi-v7a/objs-debug/application/resources/dejavu_sans.o ./obj/local/armeabi-v7a/libmyapp-dsp.a ./obj/local/armeabi-v7a/libfreetype.a ./obj/local/armeabi-v7a/libstlport_static.a ./obj/local/armeabi-v7a/libsdl.so ./obj/local/armeabi-v7a/libsdl_ttf.so ./obj/local/armeabi-v7a/libsdl_image.so ./obj/local/armeabi-v7a/libiconv.so ./obj/local/armeabi-v7a/libuniversalchardet.so ./obj/local/armeabi-v7a/libyuv2rgb.so -no-canonical-prefixes -march=armv7-a -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -L/Applications/SDK/android-ndk-r8d/platforms/android-8/arch-arm/usr/lib -lGLESv1_CM -ldl -llog "/Users/nobody/Development/repositories/git-remote/myapp-dolphin/myappDolphin"/"native/ffmpeg/ffmpeg-0.11.1/android/armv6_vfp/libffmpeg.so" -lc -lm -o ./obj/local/armeabi-v7a/libapplication.so /Applications/SDK/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/objs-debug/application/src/broov_player.o: in function broov_init_global_values(int, int, int, int, int, int, int, int, int, int, int, int, int, int, int):jni/app/src/broov_player.cpp:3414: error: undefined reference to 'filter_setup()' collect2: ld returned 1 exit status make: * [obj/local/armeabi-v7a/libapplication.so] Error 1~

Thank you in advance.

Coder Roadie
  • 838
  • 1
  • 8
  • 11

1 Answers1

0

The order in which you link libraries matters. You may need to experiment with reordering libapplication.so and libmyapp-dsp.a on the link line.

For a discussion, see Why does the order in which libraries are linked sometimes cause errors in GCC?

Community
  • 1
  • 1
NPE
  • 486,780
  • 108
  • 951
  • 1,012
  • That was a helpful reminder. What confuses me is that the file being being complained about, broov_player.cpp, is in the shared library libapplication.so. So, I would expect filter_setup to be found ... or not? – Coder Roadie Mar 23 '13 at 08:00
  • @CoderRoadie: Don't think so. `libapplication.so` has to come before `libmyapp-dsp.a`, and it comes after. – NPE Mar 23 '13 at 08:05
  • Thanks for confirming that. I'll see if I can get the order flipped. The Android NDK is really weird because it likes to control the order of things. It would be soooo much easier if we could manually set the order. – Coder Roadie Mar 23 '13 at 09:02