NDK r5 Toolchain 簡單測試

來源:互聯網
上載者:User

NDK r5 帶的 toolchain 終於可以支援 makefile 的編譯系統了。不過為了讓它支援 GNU libc++ 還頗費了一番功夫,文檔實在太缺乏了。下面是一個簡單的試成功了的 case:

 

首先我們寫一個簡單的 C++ 程式,這裡命名為 test.cpp,裡面用到了 iostream, vector, typeid,libc++ 的基本特性都包含在裡面了:

#include <vector><br />#include <iostream><br />#include <typeinfo><br />class A<br />{<br />public:<br /> virtual void func()<br /> {<br /> std::cout << "A" << std::endl;<br /> }<br />};<br />class B : public A<br />{<br />public:<br /> virtual void func()<br /> {<br /> std::cout << "B" << std::endl;<br /> }<br />};<br />int main(void)<br />{<br /> B * b = new B();<br /> A * a = dynamic_cast<A*>(b);<br /> if (a)<br /> {<br /> std::cout << "calling A::func()" << std::endl;<br /> a->func();<br /> std::cout << "typeid=" << typeid(*a).name() << std::endl;<br /> }<br /> else<br /> {<br /> std::cerr << "dynamic_cast error." << std::endl;<br /> }<br /> std::vector<int> v;<br /> v.push_back(1);<br /> std::cout << v.size() << std::endl;<br /> return 0;<br />}<br />

然後我們來寫我們的 makefile:

NDK_HOME=/Developer/android-ndk-r5<br />TOOLCHAIN_HOME=$(NDK_HOME)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86<br />CROSS_COMPILE=$(TOOLCHAIN_HOME)/bin/arm-linux-androideabi-<br />SYSROOT=$(NDK_HOME)/platforms/android-3/arch-arm<br />CC=$(CROSS_COMPILE)g++<br />STL_HOME=$(NDK_HOME)/sources/cxx-stl/gnu-libstdc++<br />NDK_LIB=$(SYSROOT)/usr/lib<br />#CCFLAGS=-MMD -MP -fpic -ffunction-sections -funwind-tables -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -DANDROID -Wa,--noexecstack -g<br />CCFLAGS=<br />INCDIRS += -I$(SYSROOT)/usr/include<br />INCDIRS += -I$(STL_HOME)/include<br />INCDIRS += -I$(STL_HOME)/libs/armeabi/include<br />LDFLAGS += --sysroot=$(SYSROOT) -L$(NDK_LIB)<br />#LDFLAGS += -Wl,--gc-sections -Wl,-z,nocopyreloc -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-rpath-link=$(SYSROOT)/usr/lib<br />#LDFLAGS += -lsupc++ -lstdc++<br />#LDLIBS += $(TOOLCHAIN_HOME)/arm-linux-androideabi/lib/libsupc++.a<br />#LDLIBS += $(TOOLCHAIN_HOME)/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a<br />#LDLIBS += $(SYSROOT)/usr/lib/libc.a<br />LDLIBS += $(STL_HOME)/libs/armeabi/libstdc++.a<br />OUTPUT=test<br />hello: test.o<br /> $(CC) $(LDFLAGS) test.o $(LDLIBS) -o $(OUTPUT)<br />test.o: test.cpp<br /> $(CC) $(CCFLAGS) $(INCDIRS) -c test.cpp -o test.o<br />clean:<br /> rm -f *.o<br />

 

make,編譯成功,上傳到 emulator 裡面運行結果:

 

calling A::func()

B

typeid=1B

1

 

正常。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.