首页 > 运维 > linux运维 > 正文

【Linux/C++】Linux下C++命令行编译示例

看不見的法師
发布: 2025-07-11 09:54:34
原创
809人浏览过

本文是关于c++++编程语言基础和linux系统操作基础的系列文章的第二部分。我们将详细介绍在linux环境下如何编译c++代码,并展示相关的编译示例和技巧。

文章目录

  • 准备源代码
  • 编译实战
    • 引入目录进行编译
    • 使用-Wall、-std 参数进行编译
    • 生成库文件
      • 链接静态库生成可执行文件
      • 链接动态库生成可执行文件
      • 静态库和动态库生成可执行文件的区别

这是该系列的第二篇文章,您可以通过以下链接阅读第一篇:

  1. Linux中编译C++代码的g++工具,以及g++的常用操作指令

准备源代码

在一个工作目录中创建以下代码文件,目录结构如下图所示:

【Linux/C++】Linux下C++命令行编译示例

立即学习C++免费学习笔记(深入)”;

代码内容如下:

swap.h文件,这个源码文件中定义了C++头部信息:

#include <iostream>
using namespace std;
登录后复制

swap.cpp文件,这个文件中定义了我们将在主函数中调用的C++代码:

#include "swap.h"
void swap(int &a, int &b) {
    int temp;
    temp = a;
    a = b;
    b = temp;
}
登录后复制

main.cpp文件,这是主函数文件,函数调用的入口:

#include <iostream>
#include "swap.h"
using namespace std;
int main(int argc, char const *argv[]) {
    int val1 = 10;
    int val2 = 20;
    cout << "Before swap: val1 = " << val1 << ", val2 = " << val2 << endl;
    swap(val1, val2);
    cout << "After swap: val1 = " << val1 << ", val2 = " << val2 << endl;
    return 0;
}
登录后复制

编译实战

引入目录进行编译

直接编译:

g++ main.cpp src/swap.cpp
登录后复制

此时会看到如下图的错误:

【Linux/C++】Linux下C++命令行编译示例

这是因为 g++ 找不到include目录下的swap.h 文件,所以我们需要使用-I参数将include目录包含进来,如下命令:

AI图像编辑器
AI图像编辑器

使用文本提示编辑、变换和增强照片

AI图像编辑器 46
查看详情 AI图像编辑器
g++ main.cpp src/swap.cpp -Iinclude
登录后复制

这时候代码就可以顺利通过编译了。

使用-Wall、-std 参数进行编译

-Wall 代表程序编译过程中输出警告信息,-std代表使用特定的 C++标准 进行编译,如下命令:

# 使用C++11标准进行编译,并且使用-Wall参数
g++ main.cpp src/swap.cpp -Iinclude -Wall -std=c++11 -o a.out
登录后复制

此时我们看到,还是能正常编译,也没有输出警告,我们也可以正常执行a.out。因为我们的代码是符合C++11标准的,为了演示一个警告,我们在main.cpp中加一行代码。如下:

#include <iostream>
#include "swap.h"
using namespace std;
int main(int argc, char const *argv[]) {
    int val1 = 10;
    int val2 = 20;
    // 定义一个变量,但是不使用
    double d = 0.0;
    cout << "Before swap: val1 = " << val1 << ", val2 = " << val2 << endl;
    swap(val1, val2);
    cout << "After swap: val1 = " << val1 << ", val2 = " << val2 << endl;
    return 0;
}
登录后复制

把输出文件改为b.out,再次执行编译,如下命令:

g++ main.cpp src/swap.cpp -Iinclude -Wall -std=c++11 -o b.out
登录后复制

此时出现如下图警告:

【Linux/C++】Linux下C++命令行编译示例

因为定义一个变量不使用,是不符合C++11的标准的,但不是错误,b.out也能正常执行。

生成库文件

我们先删除在 2 中会进行警告的代码。

链接静态库生成可执行文件
# 先进入src目录
cd src
# 汇编生成swap.o 文件
g++ swap.cpp -c -I../include
# 生成静态库libSwap.o
ar rs libswap.a swap.o
# 回到代码根目录,调用静态链接库生成可执行文件
cd ..
g++ main.cpp -lswap -Lsrc -Iinclude -o static_main
登录后复制
链接动态库生成可执行文件
# 进入src目录
cd src
# 生成动态链库文件libswap.so
g++ swap.cpp -I../include -fPIC -shared -o libswap.so
# 上面的指令等价于下面两条指令
# gcc swap -I../include -c -fPIC
# gcc -shared -o libswap.so swap.o
# 回到上级目录
cd ..
# 链接生成可执行文件 dyna_main
g++ main.cpp -Iinclude -lswap -Lsrc -o dyna_main
登录后复制
静态库和动态库生成可执行文件的区别

静态库在打包生成二进制文件的时候,直接将静态库包含进来。动态库则在打包时不打包库文件,而在运行时再把动态库文件引进来。所以我们运行的时候,静态库文件打包的可执行文件可以直接运行。而用动态库编译生成的可执行文件,直接运行会报错,是因为动态链接文件在我们的代码目录,并不在系统的库搜索目录。如果要运行动态链接库打包生成的可执行文件,我们需要手动指定程序运行依赖的库目录。

运行可执行文件命令如下:

运行静态打包的可执行文件:

# 运行静态打包的可执行文件
./static_main
登录后复制

运行动态链接库打包生成的可执行文件:

# 运行动态打包的可执行文件,需要设置 LD_LIBRARY_PATH 变量,变量值是动态链接文件所在目录
LD_LIBRARY_PATH=src ./dyna_main
登录后复制

以上就是【Linux/C++】Linux下C++命令行编译示例的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号