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 = / Applications / 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 .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:エラー:'filter_setupへの未定義の参照()'collect2:ldが1つの終了ステータスを返しましたmake:/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:エラー:未定義'filter_setup()' collect2への参照:ldは1つの終了ステータスを返しましたmake:/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:エラー:未定義'filter_setup()' collect2への参照:ldは1つの終了ステータスを返しましたmake:int、int、int、int、int、int、int、int、int、int):jni / app / src / broov_player.cpp:3414:エラー:「filter_setup()」への未定義の参照collect2:ldが1つの終了ステータスを返しました作る: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〜

前もって感謝します。

4

1 に答える 1

0

ライブラリをリンクする順序は重要です。リンクラインで並べ替えlibapplication.soを試す必要があるかもしれません。libmyapp-dsp.a

議論については、ライブラリがリンクされている順序がGCCでエラーを引き起こすことがあるのはなぜですか?を参照してください。

于 2013-03-23T06:42:58.407 に答える