我目前正在嘗試跨編譯我以前開發的跨平臺庫,以便在Android上使用它。 爲此,我使用NDK提供的arm-linux-androideabi-g ++(4.9)編譯器,並鏈接也存在於NDK中的gnu-libstdC++。Android上的完整C++ 11支持
不幸的是,由於使用了一些C++ 11功能,編譯將不會成功。 這些特徵是「std :: to_string」或「std :: stof」這樣的「string.h」中存在的特定方法,如果必須的話,可以用其他方法輕鬆替換。 但我也使用更復雜的,比如來自「future.h」的東西,如std :: future和std :: async。
我在文件「ndk/sources/cxx-stl/gnu-libstdC++/4.9/bits/basic_string.h」中找到了「string.h」的編譯錯誤原因,下面的語句返回假(_GLIBCXX_USE_C99沒有定義):
//basic_string.h
#if ((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \
&& !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
//methods I want to use
#endif
從我的理解,這些限制是由Android的仿生libc中引起的。
我有什麼辦法解決這個問題?
我已經試過使用CrystaX NDK,但它只解決了我的「string.h」問題,我寧願找到更標準的解決方案。
如何使用不特定於Android的ARM交叉編譯器?
謝謝。
我已經回覆給你[android-ndk](https://groups.google.com/forum/#!topic/android-ndk/6NjpXqr7QWQ)組,但它今天工作的時間很長,所以我的答案仍然沒有出現在那裏。關於 - 你能說更詳細的問題嗎?應該沒有問題阻止它的使用,所以它可能是你的錯誤或CrystaX NDK中的錯誤。如果有問題,我們很樂意解決它,所以請讓我知道什麼是錯的。順便說一句,您可以使用我們的[bug跟蹤器](https://tracker.crystax.net/projects/ndk)來存檔,我們會盡快解決問題。 –
2015-04-01 18:35:13