linux 编译调试 Linux怎么学

大家好,linux 编译调试相信很多的网友都不是很明白,包括Linux怎么学也是一样,不过没有关系,接下来就来为大家分享关于linux 编译调试和Linux怎么学的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

DelphiforLinux中应用共享对象库

1. Delphi for Linux是Borland公司推出的基于Linux平台的面向对象的可视化开发工具,是目前Linux平台上很好的应用开发工具。Delphi for Linux也称Kylix,开发者用Kylix开发Linux应用程序时,可能会使用到Linux操作系统本身带的大量SO文件。

2. SO是一种特殊的运行文件,包含若干方法、对象和资源。它不能直接运行,但可以被Kylix应用程序或其他可执行文件动态调用。SO文件扩展名为so。编译前源文件扩展名为dpr。本文所举例子均在Red Hat Linux及Kylix环境下调试编译通过,并可正常运行。

3. SO库文件的组成和Kylix标准单元文件的内部结构基本相同,也有声明、实现及初始化部分。区别之一在于SO库只是其他程序可以调用的方法(包括函数及过程)集合。区别之二,库程序以library关键字而非project开头启动其项目文件。库程序包含有exports语句,其列出要向外部提供的导出函数及过程。

4.共享对象库的创建,SO库文件的构成,函数重载,特殊编译指令,采用Delphi for Linux创建SO的编程规则,使用前的Linux系统设置,以及在Delphi for Linux中用隐式或显式链接方法装入和使用SO函数的基本方法,经验及技巧,并对应用SO可能出现的问题进行了探讨和分析。

5.共享对象库基本概念:多个Kylix程序或它的多个单元文件可通过接口共用一个SO库文件;某一个Kylix程序可通过多个接口使用多个SO库文件,这样SO变成一种可共用的资源,实现真正的资源共享,大大缩小了Kylix应用程序的执行代码,增强了软件的可重用性。

6.将SO文件作为Kylix应用程序的公共调用模块设计时,由于其独立于应用程序,软件升级时只需修改SO库文件及编译SO,无需更改及重编译Kylix应用主程序。

7.不仅可使用Kylix编写SO库,还可使用C或C++等常用语言来编写,只要遵循特定的接口规范。

8.共享对象库的使用,Kylix应用程序使用SO库时可以采用两种方式,一种是隐式链接(Implicit linking),也称静态装入;另一种是显式链接(Explicit Linking),也称动态装入。

9.使用前的系统设置,自定义SO库建好后,Kylix应用程序调用时会报错,这是因为Kylix找不到新建库。必须对系统进行相关设置,这与在Delphi for Windows中使用DLL库不同。DLL库建好后只需将编译后的DLL文件放到Delphi主程序目录下即可使用。

10.隐式链接,实现隐式链接并不难,只需在应用程序中加入库函数的声明语句及库的external定义从句,则库函数可以和一般局部函数一样使用。

11.显式链接,显式链接是应用程序在执行过程中可根据实际需要随时加载SO库文件,也可以随时卸载SO库文件,还可在运行时进行SO库的切换,而这些是隐式链接无法做到的。与隐式链接相比,显式链接具有更大的灵活性。

12.在Kylix中,要动态装入库和调用导出函数可以用Delphi仿真代码或自然Linux方法,下面分别介绍这两种方法。

13. SO库中窗体对象的使用,除了包含函数和过程的库之外,还可以将Kylix建立的窗体放在共享对象中,这可以是对话框或其他窗体。

Linux环境使用VSCode调试简单C++代码

本文通过演示一个简单C++代码的编译调试过程,介绍在VSCode中如何使用Linux环境下的GCC C++编译器(g++)和GDB调试器(gdb)。

关于GCC、g++、gcc、gdb,这里不做详细介绍,如果感兴趣可以参考另一篇文章。

看懂这篇文章的内容,只需要知道g++用来编译C++代码,gdb用来调试C++代码即可。

示例代码内容如下:

1.终端命令行方式编译、调试简单C++代码

如果不考虑VSCode,在Linux环境中编译调试一个简单的C++代码可以只通过命令行实现,具体过程分为两步:

第一步:将*.cpp源代码文件通过g++编译器生成一个可调试的可执行二进制文件:

指令解析:

第二步:调用gdb调试器对可执行文件进行调试:

调试的过程如下:

2.通过VSCode对C++代码进行编译、调试

主要参考:

2.1前提条件

2. g++编译器和gdb调试器已安装。可以在终端查看g++是否已安装

如果能输出版本信息,则已安装。

gdb调试器可以通过下面的命令安装(安装gdb会自动安装g++):

2.2配置tasks.json

在VSCode中打开示例代码文件夹,

1.在VSCode的主菜单中,选择Terminal>Configure Default Build Task

2.出现一个下拉菜单,显示 C++编译器的各种预定义编译任务。选择C/C++: g++ build active file(如果配置了中文,会显示"C/C++: g++生成活动文件")

3.选择后,vscode会自动生成一个.vscode文件夹和 tasks.json文件,此时的代码文件夹结构如下:

tasks.json的内容如下:

tasks.json的作用是告诉VSCode如何编译程序

在本文中是希望调用g++编译器从cpp源代码创建一个可执行文件,这样就完成了第1节中所说的编译调试第一步。

从tasks.json的"command"和"args"可以看出,其实就是执行了以下命令:

其中,

2.3执行编译

在2.2节配置完成 tasks.json文件后,VSCode就知道应该用g++编译器对cpp文件进行编译,下面执行编译即可:

1.回到活动文件hello.cpp(很重要,不然${file}和${fileDirname}这些变量都会错)

2.快捷键ctrl+shift+B或从菜单中选择运行:Terminal-> Run Build Task,即可执行 tasks.json中指定的编译过程

3.编译任务完成后,会出现终端提示,对于成功的g++编译,输出如下:

这一步完成后,在代码目录下就出现了一个可执行文件hello。

4.(可选)个性化修改 tasks.json可以通过修改 tasks.json满足一些特定需求,比如将"${file}"替换“${workspaceFolder}/*.cpp”来构建多个 C++文件;将“${fileDirname}/${fileBasenameNoExtension}”替换为硬编码文件名(如“hello.out”)来修改输出文件名

2.4调试hello.cpp

完成上述的编译配置后,就可以对hello.cpp进行调试了:

4.然后就开启调试过程了,可以单步运行、添加监视等等。

2.5个性化配置launch.json

按照2.4节的过程,已经可以简单调试一个.cpp代码,但是在某些情况下,可能希望自定义调试配置,比如指定要在运行时传递给程序的命令参数。这种情况下我们可以在launch.json中定义自定义调试配置。

下面是配置调试过程的步骤:

launch.json的作用就是在告诉VS Code应该如何调用调试器。

如果想要在调试/运行程序时添加参数,只需要把参数添加在"args"选项中即可。

2.6总结

在VSCode中编译、调试一个简单的.cpp文件,所需要做的就是:

2.7复用C++配置

上面的过程已经完成了在VSCode中调试Linux环境下的C++代码的配置,但只适用于当前工作空间。如果想要在其他的工程文件夹下复用这种配置,只需要把tasks.json和launch.json文件复制到新文件夹下的.vscode目录下,然后根据需要改变对应的源文件和可执行文件的名称即可。

3.参考教程

在linux里,c程序的编辑、编译、调试的详细步骤是什么

在linux下,一般的c程序开发流程为:

c程序的编辑:

一般情况下,简单的c程序编辑是通过vi文本编辑器进行的,语法格式和在windows下的编辑是一样的;

c程序的编译:

而编译则是对编辑好的c语言程序进行一个,预处理,编辑,汇编和链接的过程,一般格式为:编译器名-参数目标文件名源文件名;

一般工作在命令行模式;

c程序的调试:

调试阶段则是建立在c程序编译通过的情况下进行的,一般通过GDB调试进行,逐步排错和细节查看。

阅读剩余
THE END