【CMake G++ GCC】在 Linux 环境中编译 C++ 源码

news2024/11/16 11:43:44

在 Linux 环境中编译 C++ 源码

C++ 技术栏
文章演示了在 乌班图 环境下编译mathematical-expression-cpp 动态库源码,!

目录

文章目录

  • 在 Linux 环境中编译 C++ 源码
    • 目录
    • 介绍
    • 前置准备
      • apt 更新
      • 下载并进入源码包
    • 开始编译源码包
      • 修改 CMakeList 文件
      • 开始进行 makeFile 的生成
      • 开始编译
      • 查看最终编译好的包

介绍

C++ 的源码是需要编译的,不同操作系统的编译操作不同,本次我们演示的是在 Linux 中进行源码的编译,演示过程中使用 mathematical-expression-cpp 库的源码,来做被编译的源码。

前置准备

在操作进行之前我们需要进行一些准备,请按照下面的操作来一步步的操作!

apt 更新

在这里我们要做的就是安装 Cmake 和 GCC !

sudo apt-update
sudo apt-get install cmake
sudo apt install make
sudo apt install build-essential

下载并进入源码包

首先我们需要在 Linux 中的某个目录执行下面的命令

# 下载 mathematical-expression-cpp 库的源码 版本号可以根据需要进行修改!
wget https://github.com/BeardedManZhao/mathematical-expression-cpp/archive/refs/tags/1.0.2.tar.gz

# 为下载好的源码包进行解压
chmod 777 ./1.0.2.tar.gz

# 进入到源码目录
cd mathematical-expression-cpp-1.0.2

操作完毕之后,我们可以在目录中看到下面的结构!到这里就算是解压完毕了,成功进入了源码目录。

在这里插入图片描述

开始编译源码包

接下来我们就需要使用到 Cmake 来进行编译了,请继续按步骤来进行操作!

修改 CMakeList 文件

这个文件中包含的就是有关项目中的一些信息,您可以在这里按照您的要求进行变更,例如指定编译时需要使用的Cmake 版本等

vim ./CMakeLists.txt

下面就是文件中的内容

cmake_minimum_required(VERSION 3.22)
project(mathematical_expression_cpp)

set(CMAKE_CXX_STANDARD 11)

# 头文件存储目录设置
include_directories(${PROJECT_SOURCE_DIR}/include)
add_library(
        mathematical_expression_cpp SHARED
        src/core/container/CalculationResults.cpp include/CalculationResults.h
        include/Utils.h
        include/ConstantRegion.h
        src/core/calculation/PrefixExpressionOperation.cpp
        src/exceptional/MExceptional.cpp include/MExceptional.h
        src/utils/NumberUtils.cpp src/utils/StrUtils.cpp src/dataContainer/MEStack.cpp include/MEStack.h include/PrefixExpressionOperation.h
        src/core/calculation/NumberCalculation.cpp include/NumberCalculation.h
        src/core/calculation/Calculation.cpp include/Calculation.h
        src/core/mathematical_expression.cpp include/mathematical_expression.h
        src/core/calculation/BracketsCalculation.cpp include/BracketsCalculation.h
        src/core/calculation/BracketsCalculationTwo.cpp include/BracketsCalculationTwo.h
        src/core/calculation/BooleanCalculation.cpp include/BooleanCalculation.h
        src/core/calculation/BooleanCalculationTwo.cpp include/BooleanCalculationTwo.h
        src/core/calculation/FunctionManager.cpp include/FunctionManager.h
        src/core/calculation/FunctionFormulaCalculation.cpp include/FunctionFormulaCalculation.h
        src/core/calculation/FunctionFormulaCalculationTwo.cpp include/FunctionFormulaCalculationTwo.h
        src/core/calculation/CalculationConstant.cpp include/CalculationConstant.h
        src/core/calculation/CumulativeCalculation.cpp include/CumulativeCalculation.h
        src/core/calculation/FastSumOfIntervalsBrackets.cpp include/FastSumOfIntervalsBrackets.h src/core/calculation/SharedCalculation.cpp include/SharedCalculation.h)

开始进行 makeFile 的生成

在编译源码的时候需要依赖这个 makeFile 文件来进行编译操作,因此我们需要先生成这个文件,下面就是具体的操作!

# 直接在源码目录中创建一个 build 文件夹,这个文件夹是用来存放 makeFile 文件的
root@liming-virtual-machine:~/MyTest/mathematical-expression-cpp-1.0.2# mkdir build
root@liming-virtual-machine:~/MyTest/mathematical-expression-cpp-1.0.2# cd build/
root@liming-virtual-machine:~/MyTest/mathematical-expression-cpp-1.0.2/build# 

然后我们直接执行下面的命令 就可以在当前目录生成makeFile文件。

cmake ../

开始编译

接下来我们使用 make 进行最终的编译即可,下面就是相关的一些日志

root@liming-virtual-machine:~/MyTest/mathematical-expression-cpp-1.0.2/build# make
[  4%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/container/CalculationResults.cpp.o
[  9%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/calculation/PrefixExpressionOperation.cpp.o
[ 14%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/exceptional/MExceptional.cpp.o
[ 19%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/utils/NumberUtils.cpp.o
[ 23%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/utils/StrUtils.cpp.o
[ 28%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/dataContainer/MEStack.cpp.o
[ 33%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/calculation/NumberCalculation.cpp.o
[ 38%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/calculation/Calculation.cpp.o
[ 42%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/mathematical_expression.cpp.o
[ 47%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/calculation/BracketsCalculation.cpp.o
[ 52%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/calculation/BracketsCalculationTwo.cpp.o
[ 57%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/calculation/BooleanCalculation.cpp.o
[ 61%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/calculation/BooleanCalculationTwo.cpp.o
[ 66%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/calculation/FunctionManager.cpp.o
[ 71%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/calculation/FunctionFormulaCalculation.cpp.o
[ 76%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/calculation/FunctionFormulaCalculationTwo.cpp.o
[ 80%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/calculation/CalculationConstant.cpp.o
[ 85%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/calculation/CumulativeCalculation.cpp.o
[ 90%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/calculation/FastSumOfIntervalsBrackets.cpp.o
[ 95%] Building CXX object CMakeFiles/mathematical_expression_cpp.dir/src/core/calculation/SharedCalculation.cpp.o
[100%] Linking CXX shared library libmathematical_expression_cpp.so
[100%] Built target mathematical_expression_cpp

查看最终编译好的包

下面的 so 文件就是编译好的动态库文件。

请注意 编译好之后是什么样子的库文件,这和 [修改 CMakeList 文件](#修改 CMakeList 文件 “修改 CMakeList 文件”) 中的文件内容息息相关!我们这里使用的是一个动态库项目,因此在文件中是有 set(CMAKE_CXX_STANDARD 11) 这样的一句话的,编译操作也是按照 动态库来进行编译的。

root@liming-virtual-machine:~/MyTest/mathematical-expression-cpp-1.0.2/build# ll
total 1768
drwxr-xr-x 3 root root    4096  312 09:52 ./
drwxrwxr-x 7 root root    4096  312 09:50 ../
-rw-r--r-- 1 root root   13908  312 09:51 CMakeCache.txt
drwxr-xr-x 5 root root    4096  312 09:52 CMakeFiles/
-rw-r--r-- 1 root root    1668  312 09:51 cmake_install.cmake
-rwxr-xr-x 1 root root 1738016  312 09:52 libmathematical_expression_cpp.so*
-rw-r--r-- 1 root root   34229  312 09:51 Makefile

操作记录
作者:root
操作时间:2024-03-12 09:55:50 星期二
事件描述备注:保存/发布
☯ 中国 天津

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1510038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIGC——ConsiStory无需训练LoRA快速实现主题一致地文本到图像生成技术

简介 当前的图像生成技术大多数采用随机采样,这导致每次生成的图像都有所不同,特别是在生成连续图像时难以保持一致性。 举例来说,尝试用AI生成一组图像连环画时,即使使用相似的提示词,也难以达到理想效果。 尽管DA…

7-18 两个数的简单计算器

本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。 输入格式: 输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数…

嵌入式学习第二十七天!(TCP并发模型)

TCP并发模型: 1. TCP多线程模型: 缺点:创建线程会带来资源开销,能够实现的并发量比较有限。 2. IO模型: 1. 阻塞IO: 没有数据到来时,可以让任务挂起,节省CPU资源开销,提…

C# MES通信从入门到精通(1)——串口传输文件

前言: 在上位机软件开发领域,有一些工厂的mes系统需要我们通过串口发送文件的方式把一些图片或者检测数据csv文件等发送给服务器,这种方式是一些比较旧的工厂采用的方式,但是这种方式也是存在的,本文就是讲解如何使用串口发送文件详情见下文。 1、串口发送文件思路 将需…

Python-Pong-Game

我还加了音效,类似于小时候游戏机上的弹球游戏 import os import turtle import pygame#初始化pygame pygame.init()#加载声音文件 bounce_sound pygame.mixer.Sound("bounce.mp3")wn turtle.Screen() wn.title("Pong by ") wn.bgcolor(&qu…

docker学习进阶篇

一、dockerfile解析 官方文档: Dockerfile reference | Docker Docs 1.1、dockfile是什么? dockerfile是用来构建docker镜像的文本文件,由一条条构建镜像所需的指令和参数构成的脚本。 之前我们介绍过通过具体容器反射构建镜像(docker comm…

幻兽帕鲁游戏服务器多少钱?2024最新报价单请查收

游戏服务器租用多少钱一年?1个月游戏服务器费用多少?阿里云游戏服务器26元1个月、腾讯云游戏服务器32元,华为云26元,游戏服务器配置从4核16G、4核32G、8核32G、16核64G等配置可选,游戏专业服务器公网带宽10M、12M、15M…

《深入Linux内核架构》第1章 简洁和概述

目录 1.1 内核的任务 1.2 实现策略 1.3 内核的组成部分 ​编辑1.3.1 进程、进程切换、调度 1.3.2 UNIX 进程 1.3.3 地址空间和特权级别 1.3.4 页表 1.3.5 物理内存的分配 1.3.6 计时 1.3.7 系统调用 1.3.8 设备驱动程序 1.3.9 网络 1.3.10 文件系统 1.3.11 模块和…

java guide 八股

Java语言特点 简单易学、面向对象(继承、封装、多态)、平台无关性(Java虚拟机jvm)、支持多线程、可靠、安全、高效、支持网络编程、编译与解释共存 JVM:Java虚拟机(跨平台的关键) JRE&#xff…

ROS——其他ROS版本安装

1.2.6 资料:其他ROS版本安装 我们的教程采用的是ROS的最新版本noetic,不过noetic较之于之前的ROS版本变动较大且部分功能包还未更新,因此如果有需要(比如到后期实践阶段,由于部分重要的功能包还未更新,需要ROS降级),也…

Spring Cloud集成nacos配置中心

1.添加Nacos Config依赖 打开nacos-config-demo的pom.xml文件并添加以下两个依赖项 项目的配置文件中通常包括数据库连接配置项、日志输出配置项、Redis连接配置项、服务注册配置项等内容,如spring-cloud-alibaba-nacos-config-base-demo项目中就包含数据库连接配置…

控件交互触屏操作

控件交互 print(driver.find_element(By.ID, com.xueqiu.android:id/tv_agree).is_enabled()) # 判断元素是否可点击 print(driver.find_element(By.ID, com.xueqiu.android:id/tv_agree).is_display()) # 判断元素是否可显示 print(driver.find_element(By.ID, com.xueqiu.…

【梳理】k8s使用Operator搭建Flink集群(高可用可选)

文章目录 1. 架构图2. helm 安装operator3. 集群知识k8s上的两种模式:Native和Standalone两种CR 4. 运行集群实例Demo1:Application 集群Demo2:Session集群优劣 5. 高可用部署问题1:High availability should be enabled when sta…

spring boot 使用 webservice

spring boot 使用 webservice 使用 java 自带的 jax-ws 依赖 如果是jdk1.8,不需要引入任何依赖&#xff0c;如果大于1.8 <dependency><groupId>javax.jws</groupId><artifactId>javax.jws-api</artifactId><version>1.1</version&g…

JVM-3

HotSpot虚拟机对象 我在网上看了很多相关的文章&#xff0c;发现在创建对象和对象的结构中内容都不太一样&#xff0c;一些关键字也很不同&#xff0c;于是我通过参考《深入理解Java虚拟机》这本书&#xff0c;自己总结了一篇。 1.对象的创建 当JVM收到一条创建对象的字节码…

uniapp:音乐播放器

功能要求&#xff1a;全局音乐播放&#xff0c;可以上一首&#xff0c;下一首&#xff0c;暂停&#xff0c;播放。 1、mixins export default {data() {return {audio: null, // 音频对象playlist: [{url: require(../static/1.mp3)}, {url: require(../static/2.mp3)}, {url: …

多接入边缘计算赋能的AI质检系统任务实时调度策略

源自&#xff1a;电子与信息学报 作者&#xff1a;周晓天, 孙上, 张海霞, 邓伊琴, 鲁彬彬 “人工智能技术与咨询” 发布 摘 要 AI质检是智能制造的重要环节&#xff0c;其设备在进行产品质量检测时会产生大量计算密集型和时延敏感型任务。由于设备计算能力不足&#xff0c…

少儿编程机器人技术架构解析与实现流程

随着科技的飞速发展&#xff0c;少儿编程机器人成为了越来越受欢迎的教育工具&#xff0c;为孩子们提供了学习编程的新途径。在这篇文章中&#xff0c;我们将深入探讨少儿编程机器人的技术架构和实现过程&#xff0c;揭示背后的技术原理和开发策略。同时&#xff0c;我们也将介…

java-ssm-基于jsp商场停车服务管理信息系统

java-ssm-基于jsp商场停车服务管理信息系统

http协议中的强缓存与协商缓存,带图详解

此篇抽自本人之前的文章&#xff1a;http面试题整理 。 别急着跳转&#xff0c;先把缓存知识学会了~ http中的缓存分为两种&#xff1a;强缓存、协商缓存。 强缓存 响应头中的 status 是 200&#xff0c;相关字段有expires&#xff08;http1.0&#xff09;,cache-control&…