2013-03-23 11 views
1

я получаю это в моем выходе сборки (filter_setup() определяется в ./obj/local/armeabi-v7a/libmyapp-dsp.a, которые вы можете увидеть на выходе линкера. Почему filter_setup неопределенная ссылка?Почему линкер дает мне ошибку «неопределенной ссылки»?

. Примечание: Я использую Android NDK, но на данный момент это общий вопрос линкер

/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 =/Приложения/SDK/android-ndk-r8d/platform/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.s o -no-canonical-prefixes -march = armv7-a -Wl, - fix-cortex-a8 -Wl, - no-undefined -Wl, -z, noexecstack -Wl, -z, relro -Wl, -z , теперь -L/Applications/SDK/android-ndk-r8d/platform/android-8/arch-arm/usr/lib -lGLESv1_CM -ldl -llog "/ Пользователи/никто/Разработка/репозитории/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 /Приложения/SDK/android -ndk-R8d/компилированные инструменты/рука-Linux-androideabi-4,6/прекомпилированное/Darwin-x86/бен /../ Библиотека/GCC/ARM-Linux-androideabi/4,6 /../../../../ arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/objs-debug/application/src/broov_player.o: в функции 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: ошибка: неопределенная ссылка на 'filter_setup()' collect2: ld возвращено 1 статус выхода сделать: * [obj/local/armeabi-v7a/libapplication.so] Ошибка 1 ~

Спасибо заранее.

ответ

0

Порядок, в котором вы связываете библиотеки. Возможно, вам придется поэкспериментировать с переупорядочением libapplication.so и libmyapp-dsp.a на линии ссылки.

Для обсуждения см Why does the order in which libraries are linked sometimes cause errors in GCC?

+0

Это было полезное напоминание. Что меня смущает, так это то, что файл, которому жалуются, broov_player.cpp, находится в общей библиотеке libapplication.so. Итак, я бы ожидал, что filter_setup будет найден ... или нет? –

+0

@CoderRoadie: Не думайте так. 'libapplication.so' должен появиться перед' libmyapp-dsp.a', и он приходит после. – NPE

+0

Спасибо, что подтвердили это. Я посмотрю, смогу ли получить перевод. Android NDK действительно странный, потому что ему нравится контролировать порядок вещей. Было бы намного проще, если бы мы могли вручную установить порядок. –

Смежные вопросы