codeblock调用android-ndk编译调试,手机中的console应用。

首先,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是一个编译器架构,架构这个词用的有意思,有点放大一点的模板的意思。是一些代码,还用代码调用的标准组成的一个预构造的东西。面向一类的应用场景,提供快速的解决方案。架构也许是机器自动生成代码的一种解决方案。架构标准,应用目标描述,相结合,让机器自动生成面向实际应用的解决方案。这里架构,应用描述,机器编程如何结合在一起呢。有空再去充一下电。理解一下架构,与架构自动化。

猜你喜欢

转载自blog.csdn.net/qushaobo/article/details/81130993