全志R11交叉编译器灵活使用
1. 目录结构
Tina 交叉编译器是预先编译好的,目录为:
tina/prebuilt/gcc
具体目录结构如下:
.├── aarch64 (详见①)
│ ├── aarch64-toolchain.txt
│ ├── toolchain-sunxi-glibc
│ │ ├── LICENSE
│ │ ├── README.TOOLCHAIN
│ │ ├── toolchain
│ │ │ ├── aarch64-openwrt-linux -> aarch64-openwrt-linux-gnu
│ │ │ ├── aarch64-openwrt-linux-gnu
│ │ │ ├── bin
│ │ │ ├── etc
│ │ │ ├── include
│ │ │ ├── info.mk
│ │ │ ├── lib
│ │ │ ├── lib32 -> lib
│ │ │ ├── lib64 -> lib
│ │ │ ├── libexec
│ │ │ ├── sbin
│ │ │ ├── share
│ │ │ └── var
│ │ └── version.mk
│ └── toolchain-sunxi-musl
│ ├── LICENSE
│ ├── README.TOOLCHAIN
│ ├── toolchain
│ │ ├── aarch64-openwrt-linux -> aarch64-openwrt-linux-musl
│ │ ├── aarch64-openwrt-linux-musl
│ │ ├── bin
│ │ ├── include
│ │ ├── info.mk
│ │ ├── lib
│ │ ├── lib32 -> lib
│ │ ├── lib64 -> lib
│ │ ├── libexec
│ │ └── share
│ └── version.mk
├── arm (详见②)
│ ├── arm-toolchain.txt
│ ├── toolchain-sunxi-arm9-glibc
│ │ ├── LICENSE
│ │ ├── README.TOOLCHAIN
│ │ ├── toolchain
│ │ │ ├── arm-openwrt-linux -> arm-openwrt-linux-gnueabi
│ │ │ ├── arm-openwrt-linux-gnueabi
│ │ │ ├── bin
│ │ │ ├── etc
│ │ │ ├── include
│ │ │ ├── info.mk
│ │ │ ├── lib
│ │ │ ├── lib32 -> lib
│ │ │ ├── lib64 -> lib
│ │ │ ├── libexec
│ │ │ ├── sbin
│ │ │ ├── share
│ │ │ └── var
│ │ └── version.mk
│ └── toolchain-sunxi-arm9-musl
│ ├── LICENSE
│ ├── README.TOOLCHAIN
│ ├── toolchain
│ │ ├── arm-openwrt-linux -> arm-openwrt-linux-muslgnueabi
│ │ ├── arm-openwrt-linux-muslgnueabi
│ │ ├── bin (详见③)
│ │ ├── include (详见④)
│ │ ├── info.mk
│ │ ├── lib (详见⑤)
│ │ ├── lib32 -> lib
│ │ ├── lib64 -> lib
│ │ ├── libexec
│ │ └── share
│ └── version.mk
└── host (详见⑥)
└── host-toolchain.txt
详注:
① gcc/linux-x86/aarch64 是小机为 64 位的编译器目录;
② gcc/linux-x86/arm 是小机为 32 位的编译器目录(R11是 32 位机器);
③ bin 目录:存放交叉编译工具,包括 gcc, g++, ar, nm, objdump 等。
gcc: C 交叉编译器;
g++: C++交叉编译器;
ar: 创建静态链接库;
ld: 连接器,将目标文件链接为可执行程序;
objdump: 查看目标文件或者执行文件的构成;
nm: 列出目标文件的符号;
④ include 目录:存放编译应用程序时程序包含的头文件,如 stdio.h 等
⑤ lib 目录:存放编译器相关的库,如 libc 库
⑥ host 目录:存放 host 端编译器相关目录(暂时未使用,目前 host 端使用的是本地 gcc 工具等)
2. 使用例子
如果想要在 Tina 源码上添加自己的应用,可以参考《Tina Linux 系统介绍》中的“创建和移植软件包”,这种方法不需要对编译器的路径、编译选项等进行设置,同时也方便开发者对软件包进行管理,建议使用该方法。
如果需要在 Tina 源码之外单独编译应用,则需要设置 Tina交叉编译工具链路径,下面是编译一个helloworld 的例子:
目录结构:
http://bbs.16rd.com/thread-476967-1-1.html
├── helloworld
├── main.c
└── Makefile
main.c:
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
Makefile:
CROSS_COMPILE_PATH=/tina/prebuilt/gcc/linux-x86/arm/toolchain-sunxi/toolchain/bin
CROSS_COMPILE=$(CROSS_COMPILE_PATH)/arm-openwrt-linuxCC=$(CROSS_COMPILE)gcc
all:
$(CC) -o helloworld main.c
CROSS_COMPILE_PATH 需要写自己的编译器路径。
在当前目录下执行 make 即可进行编译,编译成功会生成可执行程序 helloworld,将它拷贝到小机端后即可运行。