Cgicc GUN Project官网连接:Cgicc- GNU Project - Free Software Foundation
1. 下载源码
Cgicc下载地址:
[via http] Index of /gnu/cgicc
[via FTP] ftp://ftp.gnu.org/gnu/cgicc/
目前最新版:3.2.20
2. 源码构建原理
一般,软件的安装编译步骤如下:[1]./configure --> [2]make -- > [3]make install.
[1] configure 是一个由 GNU Autoconf 提供的脚本,用于自动生成 Makefile。Autoconf 是一个用于创建可移植的源代码包的工具,它可以检测系统的特性和能力,并生成适合当前系统的配置文件。若系统是x86架构,若不指定交叉编译,会自动生成x86的配置文件。
[2] make 是一个标准的 Unix 构建工具,用于自动化编译过程。它读取 Makefile 中的规则和依赖项,并根据这些规则来构建源代码。若[1]系统是x86架构,没有指定交叉编译,构建出来的软件只能在x86环境的目标机运行。
[3] make install 是 make 的一个特殊目标。一旦 make 完成了编译过程并生成了最终的可执行文件或库文件,make install 将文件复制到指定的安装目录中(通常,安装目录位于系统的默认位置,例如 /usr/local/bin 或 /usr/local/lib),使得用户可以不指定具体的位置,就可以在系统中运行或使用这些文件(类似PATH环境变量)。
3. 交叉编译环境
当前平台/开发平台-编译环境:
[root@localroot ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@localroot ~]# uname -a
Linux localroot 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@localroot ~]# lscpu | grep Architecture
Architecture: x86_64
目标平台/运行平台-目标环境:
root@linaro-alip:~# uname -a
Linux linaro-alip 4.4.132 #38 SMP Sat Jan 4 15:11:14 CST 2020 armv7l GNU/Linux
root@linaro-alip:~# lscpu | grep Architecture
Architecture: armv7l
4. 编译步骤
tar -xzvf cgicc-3.2.20.tar.gz
cd cgicc-3.2.20
# 核心步骤
sudo ./configure --prefix=/usr/local/cgicc-3.2.20 --host=arm-linux-gnueabihf CXX=/home/project/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
注解:
1)--host:指定运行主机,即编译出来的二进制程序的运行环境。意思是用host参数,告诉configure脚本,编译出来的程序要在哪个平台上面运行。
注意:configure根据--host=xxxxx 会在makefile中生成编译器CC为 xxxx-gcc,这里要说一下,configure会用一段简单的代码,去测试调用xxxx-gcc存在不存在,如果不存在,仍然会把编译器默认为CC=gcc,也就是说,如果你用了一个错误的 --host=xxxxx,configure可能不会报错,最后make时,是调用你主机的gcc编译代码,这样编译出来的程序 ,在目标系统上面是没办法运行的。因此,要指定正确的--host值 ,才能调用正确的交叉编译工具。
2)--prefi:配置安装的路径,如果不进行独立配置,安装后
可执行文件默认放在/usr/local/bin;
库文件默认放在/usr/local/lib;
配置文件默认放在/usr/local/etc;
其他资源文件放在/usr/local/share;
如果配置了--prefix,比如.configure --prefix=/usr/local/test,就可以把所有资源文件放在/usr/local/test路径中,当需要删除此软件,只需要简单的删除该安装目录,就可以把软件卸载干净。
3)CXX:指定的编译平台编译工具
sudo make
make install
进入到安装目录,验证是否编译成功:以下显示成功编译。
4. 测试程序
1)编译程序
# 进入程序目录
arm-linux-gnueabihf-g++ -o radio_json.cgi main.cpp -I /usr/local/cgicc-3.2.20/include -L /usr/local/cgicc-3.2.20/lib -lcgicc
将编译生成的cgi程序,上传至arm平台,web server指定的cgi-bin/目录下。
2)将交叉编译生成的 libcgicc.so.3 放在/lib下
否则在执行cgi程序时报错:502
3)启动web server,浏览器输入cgi程序url,执行cgi程序
http://192.33.7.4/cgi-bin/radio_json.cgi