1
votes

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.

1

1 Answers

0
votes

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?