# 在 Linux 环境中编译 C++ 源码 *C++ 技术栏* 文章演示了在 乌班图 环境下编译`mathematical-expression-cpp` 动态库源码,! ## 目录 [TOC] ## 介绍 C++ 的源码是需要编译的,不同操作系统的编译操作不同,本次我们演示的是在 Linux 中进行源码的编译,演示过程中使用 [mathematical-expression-cpp](https://github.com/BeardedManZhao/mathematical-expression-cpp/archive/refs/heads/main.zip "mathematical-expression-cpp") 库的源码,来做被编译的源码。 ## 前置准备 在操作进行之前我们需要进行一些准备,请按照下面的操作来一步步的操作! ### apt 更新 在这里我们要做的就是安装 Cmake 和 GCC ! ``` sudo apt-get 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 3月 12 09:52 ./ drwxrwxr-x 7 root root 4096 3月 12 09:50 ../ -rw-r--r-- 1 root root 13908 3月 12 09:51 CMakeCache.txt drwxr-xr-x 5 root root 4096 3月 12 09:52 CMakeFiles/ -rw-r--r-- 1 root root 1668 3月 12 09:51 cmake_install.cmake -rwxr-xr-x 1 root root 1738016 3月 12 09:52 libmathematical_expression_cpp.so* -rw-r--r-- 1 root root 34229 3月 12 09:51 Makefile ``` ------ ***操作记录*** 作者:[root](https://www.lingyuzhao.top//index.html?search=1 "root") 操作时间:2024-04-09 15:04:09 星期二 事件描述备注:保存/发布 中国 天津 [](如果不需要此记录可以手动删除,每次保存都会自动的追加记录)