Ubuntu系统配置C/C++编译环境

在Ubuntu系统中安装和学习C语言非常的方便,与Windows复杂的环境配置不同,Ubuntu提供了多种C/C++开发工具,如GCC(GNU Compiler Collection)、GDB(GNU Debugger)和Valgrind等。这些工具不仅功能强大,而且大多数都是开源的.

安装构建工具及VS Code插件

个人习惯是使用VS Code连接到虚拟机或服务器,也可以使用其他方法:Visual Studio Code连接VMware虚拟机_vscode连接vmware ssh-CSDN博客

现在Ubuntu中安装build-essential,build-essential是一个在Linux系统中常用的软件包,它包含了编译和构建软件所需的必要工具和库文件,包含内容:如GCC(GNU Compiler Collection),用于将源代码编译成可执行文件或库文件,还有make、cmake等,这些工具可以简化软件的编译和构建过程。

sudo apt install build-essential

 在VS Code中安装插件 C/C++ Extension Pack 和 Code Runner

编译器版本及使用标准管理 

C语言使用的是gcc编译器,全称GNU Compiler Collection(GNU编译器套件),是由GGBond开发的编程语言编译器,它也支持C++、Objective-C、Fortran、Java、Ada和Go等语言。

gcc版本查看使用以下命令:

sudo gcc --version
gcc (Ubuntu 13.2.0-23ubuntu4) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
ls /usr/bin/gcc*
/usr/bin/gcc  /usr/bin/gcc-13  /usr/bin/gcc-ar  /usr/bin/gcc-ar-13  /usr/bin/gcc-nm  /usr/bin/gcc-nm-13  /usr/bin/gcc-ranlib  /usr/bin/gcc-ranlib-13

C++语言使用g++编译器,g++是GGBond的C++编译器,是gcc的一个变体,专门用于编译C++程序 ,在编译C++代码时,g++会调用gcc。两者在编译阶段是等价的,但g++还负责链接C++程序使用的库,对于后缀为.cpp或被认为是C++程序的文件,gcc和g++都会当作C++程序来处理。然而,由于gcc命令不能自动链接C++程序使用的库,所以通常使用g++来完成链接.

g++版本查看使用以下命令:

sudo g++ --version
g++ (Ubuntu 13.2.0-23ubuntu4) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
/usr/bin/g++  /usr/bin/g++-13
ls /usr/bin/g++*

在上述的编译器版本查看中可以看到使用的是gcc/g++13版本,这个版本支持目前主流的C/C++版本,已经够用。 

 如果需要更换C++标准如C++17,可以使用以下命令:

g++ -std=c++17 cpp文件 -o 编译后的可执行文件

还可以输入命令将某版本设置为默认版本,比如C++17:

export CXXFLAGS="-std=c++17"

 使用-Werror把所有警告当作错误来处理,从而识别出那些可能不兼容的代码:

g++ -std=c++17 -Werror cpp文件 -o 编译后的可执行文件

编写及运行代码 

新建一个hello.c文件,试运行下编译环境是否安装正确:

#include <stdio.h>  int main() {  printf("Hello, World!\n");  return 0;  
}
 gcc hello.c -o hello
./hello

 也可以在VS Code中点击右上角的运行按钮

 再试运行下C++语言:

// hello.cpp
#include <iostream>  int main() {  std::cout << "Hello, World!" << std::endl;  return 0;  
}

 在终端输入命令编译文件:

g++ hello.cpp -o hello
./hello

 编写并引用头文件

在项目文件夹中创建一个hello.h头文件,在同一目录中导入.h头文件无需使用 <> 符号,而是使用 "" 符号:

// hello.h    
#ifndef HELLO_H    
#define HELLO_H    extern int global_variable; // 声明全局变量      
int add(int a, int b); // 声明函数    
double multiply(double x, double y); // 声明函数    #endif

再编写一个hello_functions.c文件来处理文件连接问题:

// hello_functions.c  
#include "hello.h"  int global_variable = 100; // 定义并初始化全局变量  int add(int a, int b) {  return a + b; // 定义add函数  
}  double multiply(double x, double y) {  return x * y; // 定义multiply函数  
}

 最后修改下刚才编写的hello.c文件:

#include <stdio.h> 
#include "hello.h"int main() {  printf("Hello, World!\n"); int sum = add(5, 7); /* 调用在hello.h中声明的add函数 */  double product = multiply(3.14, 2.71); /* 调用multiply函数 */  printf("Sum: %d\n", sum);  printf("Product: %f\n", product);  printf("Global Variable: %d\n", global_variable); /* 访问全局变量 */  return 0;  
}

输入命令编译并运行hello.c和hello_functions文件: 

gcc hello.c hello_functions.c -o hello
./hello

安装第三方库 

我下载的是Melon库,这是一个跨平台的C库,包含了丰富的数据结构和算法实现,如红黑树、斐波那契堆、队列等,它还提供了多进程框架、多线程框架以及高性能事件处理等功能。Melon不依赖任何第三方库。 

使用git将Melon库克隆到项目文件夹中:

git clone https://github.com/Water-Melon/Melon.git

随后cd到Melon库的文件夹中,输入命令构建该库(也可以直接使用源码):

cd Melon  
./configure  
make  
sudo make install

接下来就可以在项目中引用这个库了,先找到libmelon.so共享库,

sudo apt install plocate
locate libmelon.so

 随后设置LD_LIBRARY_PATH环境变量来告诉动态链接器在哪里查找共享库:

export LD_LIBRARY_PATH=Melon的安装路径/lib:$LD_LIBRARY_PATH

 接下来就可以引用库了
 官方示例(使用内存池):

// test.c
#include <stdio.h>
#include "Melon/include/mln_alloc.h"// 需要检查下路径是否正确int main(int argc, char *argv[])
{char *ptr;mln_alloc_t *pool;pool = mln_alloc_init(NULL);ptr = mln_alloc_m(pool, 1024);printf("%p\n", ptr);mln_alloc_free(ptr);mln_alloc_destroy(pool);return 0;
}

编译文件,将库的路径引入: 

cc -o test test.c -I /usr/local/melon/include/ -L /usr/local/melon/lib/ -lmelon
./test

 运行成功:

在库文件夹中还有官方的教学文档: 

 

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

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

相关文章

24.1 部署-交叉编译、压缩二进制文件、Docker容器

1. 交叉编译 Go语言的优越性之一是可在众多环境下运行&#xff0c;其中包括&#xff1a; 操作系统 windows、darwin、plan9、solaris、linux、netbsd/openbsd/freebsd、android体系架构 386/amd64、arm/arm64、ppc64/ppc64le、mips/mipsle/mips64/mips64le 使用go env命令可…

穿越时空的金星奥秘:揭秘古代天文学的惊人成就

在浩瀚的历史长河中&#xff0c;人类对宇宙的探索从未停止。而在中国古代&#xff0c;一项惊人的天文发现&#xff0c;至今仍让世界为之惊叹。那就是西汉时期的《五星占》&#xff0c;一部揭示金星会合周期的珍贵文献&#xff0c;其精确度之高&#xff0c;足以令现代天文学家瞠…

【AI基础】大模型资源整理

开局一张图&#xff0c;全靠硬凑&#xff1a; 硬拼一个雷达图&#xff1a; AI大模型&#xff0c;这是核心智能助手&#xff0c;基于大模型搭建的拿来就用的成熟应用平台应用分享&#xff0c;基于大模型搭建的拿来就用的小应用AI开发&#xff0c;基于大模型开发小应用 学习资源…

基于gunicorn+flask+docker模型高并发部署

好的&#xff0c;今天我们将讨论如何使用 Gunicorn Flask Docker 来实现高并发部署。这个模型是一个流行的组合&#xff0c;用于部署Python编写的Web应用程序&#xff0c;特别是使用Flask框架的应用程序。Gunicorn是一个Python WSGI HTTP服务器&#xff0c;而Docker提供了一个…

容器之分栏窗体构件演示

代码; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);GtkWidget *window;window gtk_window_new(GTK_WINDO…

智慧园区解决方案PPT(53页)

## 1.1 智慧园区背景及需求分析 - 智慧园区的发展历程包括园区规划、经济、产业、企业、管理、理念的转变&#xff0c;强调管理模式创新&#xff0c;关注业务综合化、管理智慧化等发展。 ## 1.2 国家对智慧园区发展的政策 - 涉及多个国家部门&#xff0c;如工信部、住建部、…

抖音开放平台代开发小程序,上传模板代码

大家好&#xff0c;我是小悟 抖音小程序第三方平台开发着力于解决抖音生态体系内的小程序管理问题&#xff0c;一套模板&#xff0c;随处部署。能尽可能地减少服务商的开发成本&#xff0c;服务商只用开发一套小程序代码作为模板就可以快速批量的孵化出大量的商家小程序。 第…

Service方法增加@Asyn注解后导致bean无法找到 NoSuchBeanDefinitionException

Service方法增加Asyn注解后导致bean无法找到 NoSuchBeanDefinitionException 场景处理方法原因 场景 首先确认的是Service添加了Service或Component等注解&#xff0c;另外也增加了ComponentScan确定扫描的包路径是包含对应Service的&#xff0c;但就是无法找到这个bean。 通…

开放式耳机怎么选?五款劲爆机型强势PK!2024推荐版!

身为健身达人&#xff0c;我对耳机的要求可不低。开放式耳机让我在健身时既能享受音乐&#xff0c;又能清晰听到教练的指导。它佩戴舒适&#xff0c;不易掉落&#xff0c;而且音质出色&#xff0c;让我沉浸于运动的节奏中。市面上开放式耳机种类繁多&#xff0c;我为大家挑选了…

Omnivore:全能开源稍后阅读神器,让文字爱好者畅享阅读乐趣!

热门开源项目推荐 项目地址&#x1f517;&#x1f517;&#x1f517;&#x1f517; https://gitcode.com/omnivore-app/omnivore/overview Omnivore&#xff1a;全能开源稍后阅读神器 Omnivore App 介绍 Omnivore是一个完整的开源稍后阅读解决方案&#xff0c;专为喜欢文字…

【HarmonyOS NEXT】鸿蒙 如何在包含web组件的页面 让默认焦点有效

页面包含web组件Button组件等&#xff0c;把页面的默认焦点放到Button组件上&#xff0c;不起效果。 因为web组件默认会在组件加载完成后获取焦点&#xff1b; 可以在web的网页加载完成时onPageEnd回调中&#xff0c;将设置默认获焦的组件通过focusControl.requestFocus方法主…

自动备份SQL Server数据库,试试这4种方法!

各种规模的企业都使用 SQL 数据库来存储数据。因此&#xff0c;备份 SQL Server 数据库对于确保数据安全并在发生灾难时可恢复至关重要。对于 SQL 数据库备份&#xff0c;有多种可行的方法&#xff0c;对于特定组织来说&#xff0c;方法将取决于其具体需求。 SQL Server 备份的…

噪声-降噪引脚如何提高系统性能

由于LDO是电子器件&#xff0c;因此它们会自行产生一定量的噪声。选择低噪声LDO并采取措施来降低内部噪声对于生成不会影响系统性能的清洁电源轨而言不可或缺。 识别噪声 理想的 LDO 会生成没有交流元件的电压轨。遗憾的是&#xff0c;LDO 会像其他电子器件一样自行产生噪声。…

【乐吾乐2D可视化组态编辑器】数据通信

External Player - 哔哩哔哩嵌入式外链播放器 乐吾乐2D可视化组态编辑器地址&#xff1a;https://2d.le5le.com/ Meta2d.js支持 mqtt、websocket 和 http 轮询 3 种方式进行实时数据监听。 如果配置过 mqtt 或 websocket 或 http&#xff0c;下次打开时&#xff0c;会自动…

对于在pycharm中终端失去环境 报错-bash: conda: command not found 2024.6

背景介绍 我是在服务器上一个已经创建好conda环境&#xff0c;可以用vscode去执行conda命令 但是在pycharm上连接之后就一直不能使用conda命令 一直报错 -bash: conda: command not found 问题解读 加载环境变量文件.bashrc&#xff08;前提是你的服务器上已经给conda配置好了环…

解决linux下载github项目下载不下来,下载失败, 连接失败的问题

第一步&#xff1a;打开/etc/hosts文件 linux vim /etc/hosts 第二步&#xff1a;文件拉到最下面&#xff0c;输入以下内容 linux #GitHub Start 140.82.113.3 github.com 140.82.114.20 gist.github.com 151.101.184.133 assets-cdn.github.com 151.101.184.133 raw.githubus…

力扣(2024.06.21)

1. 54——螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 标签&#xff1a;数组&#xff0c;矩阵&#xff0c;模拟 代码&#xff1a; class Solution:def spiralOrder(self, matrix: List[List[int]]) -&…

2024会展行业发展趋势预测

在当今这个数字化浪潮汹涌的时代&#xff0c;会展行业也迎来了自己的变革时刻。 根据《2023中国会展主办机构数字化调研报告》&#xff0c;我们可以清晰地看到几个显著的趋势&#xff1a; 首先&#xff0c;数字化转型已经不再是一道选择题&#xff0c;而是必答题。 超过90%的…

Word中删除空白页

① 文字后面出现的空白页 把鼠标放在空白页的位置&#xff0c;按住Ctrl Delete即可。 ② 表格后面的空白页 把鼠标放在空白页左侧&#xff0c;直到出现一个空白的箭头&#xff0c;点击一下选中空白页&#xff0c;然后再Ctrl D&#xff0c;打开字体选项卡&#xff0c;在效果中…

Zabbix 监控 Kubernetes 集群

Zabbix 监控 Kubernetes 集群 Zabbix作为一个成熟且功能强大的监控系统&#xff0c;被许多企业广泛采用。它能够对各种IT基础设施进行全面的监控&#xff0c;包括服务器、网络设备、应用程序等。而将Zabbix与Kubernetes结合&#xff0c;可以实现对Kubernetes集群的全面监控&am…