2014-07-19 2 views
1

SFML을 컴파일하고 예제 프로젝트를 잘 만들었지 만, 내 프로젝트로 옮겼을 때 링커 오류가 발생했습니다. 다음은 ndk-build의 출력입니다.SFML Android 링커 오류

$ ndk-build 
[armeabi-v7a] Compile++ thumb: game <= main.cpp 
[armeabi-v7a] Compile++ thumb: game <= Game.cpp 
[armeabi-v7a] Compile++ thumb: game <= GameState.cpp 
[armeabi-v7a] Compile++ thumb: game <= ResourceManager.cpp 
[armeabi-v7a] Prebuilt  : libsfml-graphics.so <= <NDK>/sources/sfml/lib/armeabi-v7a/ 
[armeabi-v7a] Prebuilt  : libsfml-audio.so <= <NDK>/sources/sfml/lib/armeabi-v7a/ 
[armeabi-v7a] Prebuilt  : libsfml-network.so <= <NDK>/sources/sfml/lib/armeabi-v7a/ 
[armeabi-v7a] Prebuilt  : libsfml-window.so <= <NDK>/sources/sfml/lib/armeabi-v7a/ 
[armeabi-v7a] Prebuilt  : libsfml-system.so <= <NDK>/sources/sfml/lib/armeabi-v7a/ 
[armeabi-v7a] SharedLibrary : libgame.so 
/Programming/Android/NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: warning: hidden symbol '__aeabi_atexit' in /Programming/Android/NDK/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/libgnustl_static.a(atexit_arm.o) is referenced by DSO ./obj/local/armeabi-v7a/libsfml-graphics.so 
/Programming/Android/NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: warning: hidden symbol '__aeabi_atexit' in /Programming/Android/NDK/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/libgnustl_static.a(atexit_arm.o) is referenced by DSO ./obj/local/armeabi-v7a/libsfml-audio.so 
/Programming/Android/NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: warning: hidden symbol '__aeabi_atexit' in /Programming/Android/NDK/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/libgnustl_static.a(atexit_arm.o) is referenced by DSO ./obj/local/armeabi-v7a/libsfml-network.so 
/Programming/Android/NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: warning: hidden symbol '__aeabi_atexit' in /Programming/Android/NDK/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/libgnustl_static.a(atexit_arm.o) is referenced by DSO ./obj/local/armeabi-v7a/libsfml-window.so 
/Programming/Android/NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: warning: hidden symbol '__aeabi_atexit' in /Programming/Android/NDK/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/libgnustl_static.a(atexit_arm.o) is referenced by DSO ./obj/local/armeabi-v7a/libsfml-system.so 
jni/Game.cpp:14: error: undefined reference to 'sf::String::String(char const*, std::locale const&)' 
jni/ResourceManager.cpp:69: error: undefined reference to 'sf::Texture::loadFromFile(std::string const&, sf::Rect<int> const&)' 
jni/ResourceManager.cpp:83: error: undefined reference to 'sf::Font::loadFromFile(std::string const&)' 
jni/ResourceManager.cpp:108: error: undefined reference to 'sf::SoundBuffer::loadFromFile(std::string const&)' 
jni/ResourceManager.cpp:137: error: undefined reference to 'sf::SoundBuffer::loadFromFile(std::string const&)' 
jni/ResourceManager.cpp:153: error: undefined reference to 'sf::SoundBuffer::loadFromFile(std::string const&)' 
jni/ResourceManager.cpp:170: error: undefined reference to 'sf::Music::openFromFile(std::string const&)' 
jni/ResourceManager.cpp:198: error: undefined reference to 'sf::Music::openFromFile(std::string const&)' 
jni/ResourceManager.cpp:213: error: undefined reference to 'sf::Music::openFromFile(std::string const&)' 
collect2: error: ld returned 1 exit status 
make: *** [obj/local/armeabi-v7a/libgame.so] Error 1 

모든 "DSO에 의해 참조되는"오류는 무엇인지 모르지만 정의되지 않은 참조는 의미가 없습니다. 컴파일 할 때 가지고 있지 않은 resourcemanager를 컴파일 할 때 함수에 대한 정의되지 않은 참조가있는 이유는 동일한 라이브러리의 많은 것을 사용하는 게임 클래스를 말하고있는 이유는 무엇입니까?

내 Application.mk 파일 :

NDK_TOOLCHAIN_VERSION := 4.8 
APP_PLATFORM := android-9 
APP_STL := gnustl_static 
APP_CPPFLAGS := -std=c++0x 
APP_ABI := armeabi-v7a 

내 Android.mk 파일 :

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := game 

LOCAL_SRC_FILES := main.cpp Game.cpp GameState.cpp ResourceManager.cpp 

LOCAL_SHARED_LIBRARIES := sfml-system 
LOCAL_SHARED_LIBRARIES += sfml-window 
LOCAL_SHARED_LIBRARIES += sfml-graphics 
LOCAL_SHARED_LIBRARIES += sfml-audio 
LOCAL_SHARED_LIBRARIES += sfml-network 
LOCAL_WHOLE_STATIC_LIBRARIES := sfml-main 

include $(BUILD_SHARED_LIBRARY) 

$(call import-module,sfml) 

편집 : 아직 정의되지 않은 받고, 정적 수정하는 대신 오류의 첫 번째 세트를 공유로 STL을 연결 참조.

답변

1

는 모듈을 추가 및 C로 STL을 변경 Application.mk

NDK_TOOLCHAIN_VERSION := 4.8 
APP_PLATFORM := android-9 
APP_STL := c++_shared 
APP_CPPFLAGS += -std=c++0x 
APP_ABI := armeabi-v7a 
APP_MODULES := sfml-activity game 

의 모든이었다 밝혀 ++ _가 고정 공유했다.