2012-05-23 27 views
42

我正在從源重建Android(現在使用模擬器閃存到設備上),試圖添加一個命令行工具。我已經把我的源碼放入回購/外掛/ ...並寫入Android.mkandroid.mk arm-linux-androideabi-g ++例外和__cxa_allocate_exception

我得到以下取消定義:

__cxa_allocate_exception 
__cxa_begin_catch 
__cxa_end_catch 
__cxa_end_cleanup 
__cxa_free_exception 
__cxa_get_exception_ptr 
__cxa_rethrow 
__cxa_throw 
__gxx_personality_v0 

我已經通過其他的問題在這裏查找具有相同取消定義,但不能完全似乎找到Android的解決方案。

最後的鏈接命令被產生爲:

prebuilt/darwin-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-g++ -nostdlib -Bdynamic -Wl,-T,build/core/armelf.x -Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections -Wl,-z,nocopyreloc -o out/target/product/generic/obj/EXECUTABLES/wavsender_intermediates/LINKED/wavsender -Lout/target/product/generic/obj/lib -Wl,-rpath-link=out/target/product/generic/obj/lib -lc -llog -lcutils -lnetutils -lc -lstdc++ -lm out/target/product/generic/obj/lib/crtbegin_dynamic.o out/target/product/generic/obj/EXECUTABLES/wavsender_intermediates/ohSongcast/WavSender/WavSender.o    out/target/product/generic/obj/STATIC_LIBRARIES/liblog_intermediates/liblog.a out/target/product/generic/obj/STATIC_LIBRARIES/libcutils_intermediates/libcutils.a out/target/product/generic/obj/STATIC_LIBRARIES/libopenhome_intermediates/libopenhome.a out/target/product/generic/obj/STATIC_LIBRARIES/libgtest_intermediates/libgtest.a out/target/product/generic/obj/STATIC_LIBRARIES/libstlport_static_intermediates/libstlport_static.a out/target/product/generic/obj/STATIC_LIBRARIES/libstdc++_intermediates/libstdc++.a out/target/product/generic/obj/STATIC_LIBRARIES/libgabi++_intermediates/libgabi++.a -Wl,-z,noexecstack -Wl,--icf=safe -Wl,--fix-cortex-a8 prebuilt/darwin-x86/toolchain/arm-linux-androideabi-4.4.x/bin/../lib/gcc/arm-linux-androideabi/4.4.3/armv7-a/libgcc.a out/target/product/generic/obj/lib/crtend_android.o 

Android.mk是:

include $(CLEAR_VARS) 
LOCAL_MODULE := wavsender 
LOCAL_MODULE_TAGS := eng 
LOCAL_CFLAGS += -fexceptions -D_GNU_SOURCE -DPLATFORM_ANDROID 
LOCAL_SRC_FILES += WavSender.cpp 
LOCAL_SHARED_LIBRARIES := libc libcutils libnetutils 
LOCAL_STATIC_LIBRARIES := libcutils libopenhome 
LOCAL_STATIC_LIBRARIES += libopenhome libgtest libstlport_static libstdc++ libgabi++ 
LOCAL_LDLIBS += -lstdc++ 
include external/stlport/libstlport.mk 
include $(BUILD_EXECUTABLE) 

任何人都可以看到一個問題或點我的方向得到掰正確的行爲linux-androideabi-g ++?

+0

我有類似的問題。嘗試使用'showcommands'運行make以獲取詳細的編譯行。在我看來,我看到了'-fexceptions',但是_also_'-fno-exceptions'是默認的。我想知道哪個優先,哪怕這與聯繫問題有關。可能不會。 –

回答

0

所有的未定義來自libstdC++。

當你有不同的libstdC++版本並編譯某個版本並與另一個版本鏈接或忘記鏈接時,經常會發生這種情況。

有時,如果鏈接是在需要它的庫之後完成的,它甚至會發生。

0

我遇到了類似的__cxa未定義一段時間,因爲構建了一個項目,該項目正在拉取庫/共享對象,其中一些定義了APP_STL:= gnustl_shared,而另一些則在其Application.mk文件中聲明瞭gnustl_static。

也許你可能會碰到類似的東西?如果是這樣,我建議在組合解決方案中使用其中一種,但不能同時使用兩種。

1

考慮刪除libstd ++作爲Android.mk靜態它應該默認爲標準Android實現和你應該罰款

其實,我看你加它既可作爲靜態和動態庫。

刪除靜態libstdC++或動態的。如果這樣做不會嘗試刪除兩個