2012-01-31 57 views
1

我有一個構建使用Boost C++庫的Android本機庫的問題。由ndk-build生成的鏈接命令指定 stdC++之後的升壓庫,導致對STL元素的幾個未定義引用。通過編輯鏈接命令並移動boost庫,以便在stdC++之前指定它們,我可以擺脫鏈接錯誤(並生成工作庫)。如何構建使用Boost C++庫的原生Android可執行文件

如何讓ndk-build將stdC++之前的boost庫放入鏈接命令中? (或者有其他解決方案嗎?)

僅供參考,我的Android.mk文件粘貼在下面。

感謝, Shlomy

=============== Android.mk文件=================== ==

LOCAL_PATH := $(call my-dir) 
DEBUG_SERVER := $(HOME)/upontek_Host_Gen_Dev/Host_Infra/NtrigNetPlatform/DebugServer 

include $(CLEAR_VARS) 

LOCAL_MODULE := ntrig_generic_api 

LOCAL_CFLAGS := -DANDROID_NDK -O3 -Wall -c -fmessage-length=0 -Wno-write-strings 
ifeq ($(TARGET_ARCH_ABI),x86) 
    # x86 causes link error if compiling with -fstack-protector 
    LOCAL_CFLAGS += -fno-stack-protector 
else 
    LOCAL_CFLAGS := -DANDROID_NDK -DBOOST_THREAD_LINUX -DBOOST_HAS_PTHREADS -D_GLIBCXX__PTHREADS -fexceptions 
endif 

LOCAL_C_INCLUDES += \ 
    ./inc \ 
    ../../Common/inc \ 
    $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/include \ 
    $(NDK_PATH)/sources/cxx-stl/gnu-libstdc++/libs/$(TARGET_ARCH_ABI)/include \ 
    $(BOOST_DIR)/boost_1_45_0 \ 
    $(DEBUG_SERVER)/Common/inc \ 
    $(DEBUG_SERVER)/ClientLib/inc 

LOCAL_SRC_FILES := \ 
    ../src/GenericApi.c ../src/DebugClient.cpp 

LOCAL_LDLIBS := \ 
    -L$(BOOST_DIR)/build/lib -lboost_regex-mt -lboost_date_time-mt -lboost_system-mt \ 
    -lboost_thread-mt 

include $(BUILD_STATIC_LIBRARY) 
+0

對不起主體和描述之間的不匹配 - 應用程序和庫中都存在同樣的問題。 – user1180636 2012-01-31 16:46:11

回答

1

好的,問題解決了。該解決方案包括簡單地將libstdC++。添加到boost庫列表的末尾 - 因此鏈接器命令實際上包含該庫的兩個規範。原來在鏈接命令的兩個地方有相同的庫是可以的。

相關問題