2013-03-23 2 views
1

내가()는 링커 출력에서 ​​볼 수있는 ./obj/local/armeabi-v7a/libmyapp-dsp.a에 정의되어이 내 빌드 출력 (filter_setup를 얻을. 왜 정의되지 않은 참조는 filter_setup입니까?왜 링커에서 "정의되지 않은 참조"오류가 발생합니까?

참고 : Android NDK를 사용하고 있지만이 시점에서 일반적인 링커 질문입니다.

/응용 프로그램/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/플랫폼/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, -n-undefined -Wl, -z, noexecstack -Wl, -z, relro -Wl, -z lib/lib/linux/lib/lib/lib/lib/lib/lib/lib/lib/lib/lib/lib/lib/lib/lib/lib/lib/돌고래/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, 3414 : error : 'filter_setup()'에 대한 정의되지 않은 참조 collect2 : ld가 반환 한 1 종료 상태 make : * [obj/locale/armeabi-v7a/libapplication.so] 오류 1 ~

감사합니다.

답변

0

라이브러리 연결 순서는 중요합니다. 링크 행에서 libapplication.solibmyapp-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는 사물의 순서를 제어하기를 좋아하기 때문에 정말 이상합니다. 주문을 수동으로 설정할 수 있다면 훨씬 쉬울 것입니다. –