2015-02-10 59 views
1

我有一個大的C/C++庫,它可以在XCode上編譯,但它不能在Eclipse上使用Android NDK進行編譯。 我已經做了很多關於這個錯誤的研究和搜索,現在有兩天了,現有的答案似乎都沒有幫助。NDK文件標記中的Android.mk

當前的錯誤信息是:重複多類

error: undefined reference to ... 

此錯誤,即使它們都存在。

在Xcode中,這是一種編譯使用LLVM 6.0只有2編譯標誌的Mac OS平臺:

Apple LLVM 6.0 C Language Dialect: C99[-std=c99] 
Apple LLVM 6.0 C++ Standard library: libstdc++ (GNU C++ standard library) 

我的Android是目前的設置是這樣的:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := com.LibAndroidBridge 
LOCAL_SRC_FILES := Class.cpp 

LOCAL_C_INCLUDES += $(LOCAL_PATH)/...several 

#LOCAL_ALLOW_UNDEFINED_SYMBOLS := true 

LOCAL_CFLAGS += -D__GXX_EXPERIMENTAL_CXX0X__ 
LOCAL_CFLAGS += -x c++ 
LOCAL_CFLAGS += -DHAVE_PTHREADS 
#LOCAL_CFLAGS += -std=c99 

LOCAL_CPPFLAGS += -fexceptions 
LOCAL_CPPFLAGS += -std=c++11 
#LOCAL_CPPFLAGS += -std=c99 

LOCAL_CPP_FEATURES := rtti exceptions 

LOCAL_LDLIBS += -llog 
LOCAL_LDLIBS += -latomic 

include $(BUILD_SHARED_LIBRARY) 

而且我Application.mk文件目前的設置是這樣的:

APP_CPPFLAGS+= -std=gnu++0x 

#APP_ABI := all 

APP_CPPFLAGS += -fexceptions 
APP_CPPFLAGS += -frtti 

#APP_CFLAGS += -std=c99 

NDK_TOOLCHAIN_VERSION:=4.8 
APP_STL := gnustl_shared 
APP_CPPFLAGS += -std=c++11 

任何關於如何使這個大阿莫沒有代碼在Android上編譯?

謝謝!

回答

0

這取決於未定義參考的具體含義。如果這是你的一些代碼,你可能會在LOCAL_SRC_FILES中丟失一些文件。如果這是一個庫,你需要將它添加到LOCAL_STATIC_LIBRARIES(儘管你需要Android版本)。

+0

我指向LOCAL_SRC_FILES中的文件夾,並且我還添加了它們的所有子文件夾。 一些問題(至少可以解決問題並帶來新問題)可以解決的問題是,除了標題外,還包括文件的.cpp版本。 我不確定這是否是一個好主意,因爲這樣做的目的是重用庫,但是因爲這有超過3800個文件,我甚至沒有完全追求這個想法。 任何想法爲什麼它不像XCode那樣編譯? – TooManyEduardos 2015-02-10 21:20:07

+0

如果要使用該庫,則需要爲Android進行編譯,然後在「LOCAL_STATIC_LIBRARIES」中指定它。 – StenSoft 2015-02-10 21:22:40

+0

那麼這就是我想要做的,但它不會編譯 – TooManyEduardos 2015-02-10 21:23:33

相關問題