在Linux下如何开发C程序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Linux下如何开发C程序?相关的知识,希望对你有一定的参考价值。

在Linux开发环境下,GCC是进行C程序开发不可缺少的编译工具。GCC是GNU C Compile的缩写,是GNU/Linux系统下的标准C编译器。虽然GCC没有集成的开发环境,但堪称是目前效率很高的C/C++编译器。《linux就该这么学》非常值得您一看。Linux平台下C程序开发步骤如下:
1.利用编辑器把程序的源代码编写到一个文本文件中。
比如编辑test.c程序内容如下:
/*这是一个测试程序*/
#include<stdio.h>
int main(void)

printf("Hello Linux!");

2.用C编译器GCC编译连接,生成可执行文件。
$gcc test.c
编译完成后,GCC会创建一个名为a.out的文件。如果想要指定输出文件,可以使用选项-o,命令如下所示:
$gcc-o test1 test.c
这时可执行文件名就变为test1,而不是a.out。
3.用C调试器调试程序。
4.运行该可执行文件。 在此例中运行的文件是:
$./a.out 或者 test1
结果将得出:
Hello Linux!
除了编译器外,Linux还提供了调试工具GDB和程序自动维护工具Make等支持C语言编程的辅助工具。如果想要了解GCC的所有使用说明,使用以下命令:
$man gcc
参考技术A gccfirst.C-ofirst说明:1>编译当前目录下、名字叫做first.C的c源文件;2>在当前目录下、生成名字叫first(这个名字可以自己随便写、符合linux命名规则就行)的可执行程序;关于运行:用ls-l命令,可以看到当前目录下有一个绿色的文件、名字叫first,就是刚刚编译得到的文件;使用命令“./first”既可运行(无双引号、双引号是用来说明的);不懂再问~ 参考技术B 在linux下输入:(以hello.c为例)
首先选中文件要保存的路径(如:cd work)
vi hello.c(要编辑的文件名)
输入程序:
# include<stdio.h>
int main(void)

printf("hello,world!\n");
return 0; 注:return和0之间要有空格

退出并保存程序:
在vi模式下,按ESC后,按 :wq加enter键
利用gcc编译程序:
(先要找到程序存在哪个文件夹中)
ls
cd work
gcc -Wall hello.c (或者是gcc hello.c -o hello) 注:在编译时最好加上-Wall选项,这样的话可以把隐藏的warning也显示出来,Wall首字母要大写。
输出程序结果:
./hello (或者是 ./a.out)
执行完后可以得到:
hello, world!
想学就看看《Linux就该这么学》

当应用程序在不同用户下运行时,如何在 Linux 上远程调试 C#/.Net 应用程序?

【中文标题】当应用程序在不同用户下运行时,如何在 Linux 上远程调试 C#/.Net 应用程序?【英文标题】:How remote debug C#/.Net app on Linux when the app is run under a different user? 【发布时间】:2020-07-31 12:59:49 【问题描述】:

我在 Linux (Ubuntu) 上运行 .Net Core 微服务,并尝试通过 SSH 使用 Visual Studio 进行远程调试。但是该服务在用户svcuser 下运行,而我的用户是mainuser。主用户与服务用户在同一组中。

在 Visual Studio 中,我可以看到服务正在运行的进程,但是当我尝试附加时,我得到:

发生了一个或多个错误。无法附加到进程。 .Net 调试器没有足够的权限来调试进程。要调试此进程,vsdbg 必须以 root 权限运行。

我查看了 MS 文档,但对于 Linux,他们所拥有的只是:https://docs.microsoft.com/en-us/visualstudio/debugger/remote-debugging-dotnet-core-linux-with-ssh?view=vs-2019,其中没有关于使用其他用户运行服务的信息

他们关于解决此类问题的唯一信息仅适用于 Windows:https://docs.microsoft.com/en-us/visualstudio/debugger/error-the-microsoft-visual-studio-remote-debugging-monitor-on-the-remote-computer-is-running-as-a-different-user?view=vs-2019

【问题讨论】:

"要调试此进程,vsdbg 必须以 root 权限运行。" @LexLi 必须有一种没有root权限的方法 你找到解决方案了吗? @NikolaGaić 不,我们最终只是将其限制在我们可以将用户设置为相同的环境中 【参考方案1】:

如果您拥有sudo 权限,那么这相对容易,并且可以保护那些拥有sudo 权限的用户。无需重新配置用户/环境,并允许您调试机器上的任何进程,无论它以哪个用户帐户运行。

如果您使用 Visual Studio 首次尝试调试,您​​会发现在您尝试使用的用户帐户的主目录中创建了一个 ~/.vs-debugger 文件夹。此命令将帮助您找到已安装的 vsdbg 二进制文件。您可以手动安装 VsDbg,但我发现利用自动化过程更容易。如果您使用的是 VSCode,这将成为一个手动过程,并留给读者一个练习,但我仍然会使用 VS2019 IDE 来准备目标,以保持工具之间的一致性。

find ~ | grep vsdbg

对于我的安装,二进制文件位于~/.vs-debugger/vs2019/vsdbg,并且该路径很可能会随着时间而改变。

首先,将二进制文件重命名为方便的名称:

mv ~/.vs-debugger/vs2019/vsdbg ~/.vs-debugger/vs2019/vsdbg-bin

其次,创建一个替换二进制文件的脚本:

touch ~/.vs-debugger/vs2019/vsdbg
chmod 770 ~/.vs-debugger/vs2019/vsdbg
nano ~/.vs-debugger/vs2019/vsdbg

脚本内容可能看起来像这样,注意vsdbg-bin 的完整路径,$@ 的使用确保传递给脚本的所有命令行参数都转发到 VsDbg。

#!/bin/bash
sudo ~/.vs-debugger/vs2019/vsdbg-bin $@

现在从 Visual Studio 重试您的调试会话,如果您操作正确,您应该能够使用 SSH->VsDbg 附加到目标计算机上的任何远程进程。 “在我的机器上工作。” ;) 这已通过 VS2019 16.8.4.NET 5.0VsDbg 16.9.20122.2 调试在 Debian 5.4.8 (x64) 上运行的 ASP.NET Core 应用程序得到证实,该应用程序由 systemd 在 Azure 中的服务用户帐户下启动。 “甜。”

HTH!

【讨论】:

优秀的答案! 真的很好,谢谢

以上是关于在Linux下如何开发C程序?的主要内容,如果未能解决你的问题,请参考以下文章

Linux环境下C编程指南的内容简介

linux终端下如何进行C语言编译

Linux下如何运行C程序?

如何用C语言实现在linux下开发软件 请大虾帮忙解决

请教linux下程序怎么获取热插拔事件

Linux C编程之一:Linux下c语言的开发环境