全志R11交叉编译器灵活使用

wannagonna 2019-12-30

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,将它拷贝到小机端后即可运行。

相关推荐