首先,codeblock是不用安装的,下载的zip包,在解压后运行前。先从android ndk中,安装NDK独立编译工具。并把目录加入的window的path变量中。这样在打开codeblock就能自动找到这个工具应生成一相对应的编译目标选项。
"D:\Program Files\python27\python" make_standalone_toolchain.py --arch arm --api=9 --install-dir=d:/ndk-arm --force
如果不这样做,可能就要自已配一个编译选项。
1,codeblock菜单setting->complier setting ->copy(gnu gcc complier)自已命名一下。
2,配置其compiler settings选项卡的下 :(这样配置要能要按自已的需要去改,这里的主要是用于gcc 的参数,但名字写法都不太一样)
其下other compiler options :-Istdc++
其下#defines加入
android_ndk=D:\android-ndk\android-ndk-r10e
ANDROID
__ARM_ARCH_5TE_
TVP_TRACE
3,配置其linker settings 加入要link libraries: (这是对链接库的配置)
stdc++(这个必需的。 ),还可能要加入m c这些我不知什么意思,见别人这样加过,多加了,不用不会报错的。可能是JNI之类的用的。
4,配置其search directories (这里是找头文件,找lib的路径)
这是头文件(compiler用)的:
D:\android-ndk\android-ndk-r10e\platforms\android-9\arch-arm\usr\include
D:\android-ndk\android-ndk-r10e\sources\cxx-stl\gnu-libstdc++\4.8\include
D:\android-ndk\android-ndk-r10e\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi\include
D:\android-ndk\android-ndk-r10e\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\include
D:\android-ndk\android-ndk-r10e\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\lib\gcc\arm-linux-androideabi\4.8\include
这是库(link用)的:
D:\android-ndk\android-ndk-r10e\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi
D:\android-ndk\android-ndk-r10e\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\lib\gcc\arm-linux-androideabi\4.8
D:\android-ndk\android-ndk-r10e\platforms\android-9\arch-arm\usr\lib
5,然后就是配工具了,在选项卡toolchain executables,在complier'installation directory 注意是bin的上一级目录就可。
programFiles就是bin目录下的带长长前缀的gcc ,g++之类了。有意思的是c++complier用g++, linker for dynamic libs:也用g++.
但linker for static libs 用ar. debugger又开了人个配置菜单。这里先不选。
到这里简单的hello word 应当是可以编译通过了。
如果报错,先用安装NDK独立编译工具试试吧。我实际用时,因为是看别人配成.so的编译配置去试的报了许多错误。安装NDK独立编译工具的好处是许多选项是在安装独立工具时配好的,并且独立工具可用非,是可以通过命令先试出来的。codeblock写法与gcc有差别,所以分步去配容易找出问题。如果是写so.给JNI用的话,还是有AS吧。codeblock,并不是独立的编译工具,它的许多应用还是依赖,NDK,这与codesoucery完全不一样,codesoucery带有标准的C库存实现。
codesoucery也有好处是,我配成了用gdb的IDE界面去调试。
要配调试;
1,codeblock菜单setting->debugger setting -> create config自已命名一个。
2,在自已命名的debugger config下配executable path: 找到gdb.exe的目录。配成它。
这个配置其它的可以不动。
3,菜单debug->active debug中选择自已配的。
4,菜单project ->properties下,debugger选项卡,debug的target,remote connection选项卡,ipaddress :
写为localhost。port写为1234(这个与一会目标机上的一至,并且没别的东西用就好)。这些也是人gdb命令调用的参数。但与命令调用时写法有点不一样,在菜单中分成了三个部分配它。这是因为需要改动的时机不一样。有些东西,只要配一次对全部的工程都实用。有些一换调试方法就要改,所以分成了这三个地方去配,用命令的话,只是一行写完,但用命令,在调试时看代码参数都不方便。这里gdb调试的客户-服务器模式的,客户机就配完了。
5,服务器用全手工,ADB命令配吧。写在codeblock的调试前调用中,老卡死,我也不知为什么。
首先:c:/adb/adb push D:\work2018\android-ndk-qu\codetest\bin\Debug\gdbserver /data/ququfile/Ctest
c:/adb/adb push D:\work2018\android-ndk-qu\codetest\bin\Debug\te /data/ququfile/Ctest
c:/adb/adb shell chmod 777 /data/ququfile/Ctest/te
c:/adb/adb shell /data/ququfile/Ctest/gdbserver localhost:1234 /data/ququfile/Ctest/te
这里te是我编译产生的。gdbserver 没找到用codeblock如何生成,把有AS编译下生成的直接copy过来用.如果平台不变,gdbserver只要下载一次就好。/data/ququfile/Ctest是我在手机上生成的测试用目录。本来我是把这些写在调试前调用的。
c:/adb/adb shell /data/ququfile/Ctest/gdbserver localhost:1234 /data/ququfile/Ctest/te 这个调用失败的原因可能是权限,这里调用是shell权限。我在adb shell后,su进入了root。然后,调用的:
#/data/ququfile/Ctest/gdbserver localhost:1234 /data/ququfile/Ctest/te
在pC端带要一个命令映射一下网络接口。>adb forwrd tcp:1234 tcp:1234 用adb 把两边的网络接口连接上。如果网络通时,可能有接接用网络的方法,我没去试。adb用的Usb比无线网络快。
最后,在codeblock的界面上设置断点,启动调试,就能连上了,就可以看到配置结果了。
这个东西配好后对解决我的LLDB编译问题一点用也没有,一个工程代码换一个编译环境就是一个大坑,这个坑没事不要去跳了。很难的。能用原环境就听什么跨平台的说法,这个跨平台的坑不是一般的深,因为个个平台都想搞出自已的特色,跨平台随着版本变化的坑相当的深。并且通常不是自已熟练,的编程领域的东西。
结论codeblock也就是一个IDE,和eclipse差不多,可能codeblock的开源性,好一点吧。感觉也就一般。
LLVM是一个编译器架构,架构这个词用的有意思,有点放大一点的模板的意思。是一些代码,还用代码调用的标准组成的一个预构造的东西。面向一类的应用场景,提供快速的解决方案。架构也许是机器自动生成代码的一种解决方案。架构标准,应用目标描述,相结合,让机器自动生成面向实际应用的解决方案。这里架构,应用描述,机器编程如何结合在一起呢。有空再去充一下电。理解一下架构,与架构自动化。