Cgicc搭建交叉编译环境(移植到arm)

news/2024/11/19 2:13:58/

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


http://www.ppmy.cn/news/1443649.html

相关文章

鸿蒙应用ArkTS开发- 选择图片、文件和拍照功能实现

前言 在使用App的时候,我们经常会在一些社交软件中聊天时发一些图片或者文件之类的多媒体文件,那在鸿蒙原生应用中,我们怎么开发这样的功能呢? 本文会给大家对这个功能点进行讲解,我们采用的是拉起系统组件来进行图片…

form1弹出子窗体form2,拖动子窗体判断是否离开父窗体区域,含源码(学习笔记)

一、效果(进入和离开) 子窗体到达父窗体边缘时变色。 二、代码分析 判断父窗体的目的,可以控制子窗体要随父窗体走。上面代码需要加以处理。 如:this.Location new Point(parentPoint.X distanceFromEdge, this.Location.Ydis…

麒麟龙芯loongarch64 electron 打包deb包

在麒麟龙芯(loongarch64)电脑上 使用electron 开发桌面应用。之前用electron-packager 打包出来的是文件夹 是 unpack 包。现在需要打包deb包,依据开发指南开始打包。 在项目文件夹下 打开终端 输入 npm run packager 先打包unpack包 然后…

C语言 | Leetcode C语言题解之第55题跳跃游戏

题目&#xff1a; 题解&#xff1a; #define max(a, b) (((a) > (b)) ? (a) : (b))bool canJump(int* nums, int numsSize){int cover 0;int i;// 只可能获取cover范围中的步数&#xff0c;所以i<coverfor(i 0; i < cover; i) {// 更新cover为从i出发能到达的最大…

html表格导出为word文档,导出的部分表格内无法填写文字

导出技术实现&#xff1a;fileSaver.jshtml-docx-js 1.npm安装 npm install --save html-docx-js npm install --save file-saver 2.页面引入 import htmlDocx from html-docx-js/dist/html-docx; import saveAs from file-saver;components: {htmlDocx,saverFile, }, 3.页…

第三弹:JavaScript 学习记录

目录 1.1. 了解 1.1.1. 为什么学习JavaScript 1.1.2. JavaScript简介 1.1.3. JavaScript / ECMAScript 1.1.4. JavaScript使用方式 1.1.5. JavaScript输出 1.1.6. JavaScript语句 1.1.7. JavaScript注释 1.1.8. JavaScript变量及常量 1.1.9. JavaScript数据类型 1.1.…

2014NOIP普及组真题 4. 子矩阵

线上OJ&#xff1a; 一本通&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1968 核心思想&#xff1a; 思考1 看到这样的题型&#xff0c;第一反应还是动态规划DP。但本题中又要选行又要选列&#xff0c;比以前只做列选择的题目多了一个行变量。 思考2 假设没…

YOLOv8: 快速而准确的对象检测

YOLOv8: 快速而准确的对象检测 背景 对象检测是计算机视觉中的一个关键任务,它可以帮助我们在图像或视频中识别和定位感兴趣的物体。其中,YOLO(You Only Look Once)系列是一类非常出色的实时对象检测算法,以其快速和准确的特点而闻名。YOLOv8是YOLO系列的最新版本,由Ultralyti…