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调试进行,逐步排错和细节查看。