编译程序

gdb调试

落花浮王杯 提交于 2020-03-09 07:16:28
1. linux下编译C程序使用cc gcc g++ 编译C++程序使用 g++。 2. 调试程序使用gdb。 3. 调试过程主要参考以下两篇文章: http://blog.csdn.net/haoel/article/details/2879 http://blog.csdn.net/haoel/article/details/2880 4. 今天在Linux上用GDB进行程序调试的时候,发现提示: No symbol table is loaded. Use the "file" command. 导致这个错误的原因一般是:在交叉编译时没有加-g选项. 所以在编译程序时一定要注意加上-g这个选项,尤其在写Makefile文件时, 一定不要偷懒,仔细检查,确认每个编译条件都添加了-g选项。 来源: https://www.cnblogs.com/ZJUKasuosuo/archive/2012/08/27/2658038.html

GCC参数介绍

China☆狼群 提交于 2020-03-09 02:24:13
gcc参数介绍 -x language filename 设定文件所使用的语言,而不是以后缀识别语言 -x none filename 关掉上个选项的语言设置,使用文件的后缀识别语言 -c 对文件进行预处理、编译和汇编,生成obj文件 gcc -c hello.c -C 在预处理的时候,不删除注释信息,一般用于分析程序 -S 只进行预处理和编译,生成汇编代码 gcc -S hello.c -E 只进行预处理,这个选项不生成文件,可以使用重定向或者-o选项使其生成一个文件 gcc -E hello.c -o hello.i -o 制定目标的名称,默认为a.out gcc -o hello hello.c -ansi 关闭gnu c中与ansi c不兼容的特性,激活ansi c的专有特性 -include file 包含某个代码,相当于在代码中使用#include gcc hello.c -include /usr/lib/hello.h -imacros file 将file中的宏加入到输入文件中 -Dmarco 相当于#define macro -Dmarco=defn 相当于#define macro=defn -Umacro 相当于#undef macro -Idir 对于#include“filename",gcc/g++会先在当前目录查找头文件

gcc常用选项总结

给你一囗甜甜゛ 提交于 2020-03-09 02:14:34
一般常说的“编译”包含预编译、编译,汇编,链接4个动作。使用gcc编译时,如果不带任何编译选项,gcc默认会执行4个动作最后生成a.out可执行模块。在某些情况下使用gcc的选项很有用。 一,查看详细的编译过程 -v 选项:有两个作用。除了查看gcc版本之外,在编译时带上该选项可以看到详细的编译过程。比如分别执行编译,汇编,链接等命令,并且查看到使用的标准启动文件crt1.o, crti.o等,标准库文件libc,libgcc等 gcc -v -o app hello.c 二,查看预处理的结果 -E 选项:仅预编译。该选项分析代码时很有用。如果宏定义很复杂,比如宏定义嵌套时,使用该选项可以看到宏展开后具体值。 gcc -E hello.i hello.c 另外在预处理结果文件中可以看到,其他头文件中数据类型和函数声明在结果文件中的声明。 三,将编译和链接分开 -c 选项:指定仅编译和汇编,生成的结果是目标文件。gcc默认执行便和链接,如果一个工程中有多个源文件,使用该选项把编译和链接动作分开,提高编译效率。 gcc -c -o aaa.o aaa.c gcc -c -o bbb.o bbb.c gcc -o app aaa.o bbb.o 四,其他常用选项 -S 选项:仅编译,不执行汇编和链接,生成的结果是汇编代码文件。 -static 指定编译时静态链接库文件。 五

nginx编译安装及配置初窥

南楼画角 提交于 2020-03-08 23:24:10
nginx 编译安装 nginx.org download 源码包 根据需要安装对应的模块及设置相关路径,可参考nginx.org官方安装notes    1 ~]# yum groupinstall "Development Tools" "Server Platform Development" 2 ~]# yum install pcre-devel openssl-devel zlib-devel 3 ~]# useradd -r nginx 4 ~]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with

编译过程划分

↘锁芯ラ 提交于 2020-03-08 20:24:18
- 1.词法分析 对构成源程序的字符串进行扫描和分解,识别出一个个的单词,如基本字(begin、end、if、for、while),标识符、常数、运算符和界符(标点符号、左右括号) - 2.语法分析 在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位,如“短语”、“句子”、“程序段”和“程序”等。 自顶向下的语法分析包含 递归下降分析法 和 预测分析法 - 3.语义分析 检查源程序上有没有语义错误,在代码生成阶段收集类型信息 - 4.中间代码生成阶段 在进行了上述的语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成一种内部表示形式,并分配寄存器。 优点:有利于编译程序的可移植性 常用的中间代码有:后缀式、三元式、四元式和树 - 5.代码优化 对前一阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间 - 6.目标代码生成 这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码,它和具体的机器相关 - 出错处理 动态语义错误 逻辑错误不会在编译阶段发现 静态语义错误 指在编译阶段发现的错误 来源: https://www.cnblogs.com/south-wood/p/12444501.html

针对于ECMA5Script 、ECMAScript6、TypeScript的认识

隐身守侯 提交于 2020-03-08 16:14:50
什么是ECMAScript、什么又是ECMA? Ecma 国际(Ecma International)是一家国际性会员制度的信息和电信标准组织。1994年之前,名为 欧洲计算机制造商协会 (European Computer Manufacturers Association)。因为计算机的国际化,组织的标准牵涉到很多其他国家,因此组织决定改名表明其国际性。现名称已不属于首字母缩略字。 ECMAScript 是一种由 Ecma国际 (前身为 欧洲计算机制造商协会 ,英文名称是European Computer Manufacturers Association)通过ECMA-262标准化的脚本 程序设计语言 。这种语言在 万维网 上应用广泛,它往往被称为 JavaScript 或 JScript ,但实际上后两者是ECMA-262标准的实现和扩展。 ECMAScript和JavaScript到底是什么关系? 很多初学者会感到困惑,简单来说,ECMAScript是JavaScript语言的国际标准,JavaScript是 ECMAScript 的实现。 什么是ECMAScript5,什么是ECMAScript6呢? 有人总认为ECMAScript5就是所谓的ECMAScript2015(是因为都有个5么?),其实是不对了

nginx重新编译添加ssl模块

落爺英雄遲暮 提交于 2020-03-08 14:15:05
https://www.cnblogs.com/zhming26/p/6278667.html https nginx配置 找到安装nginx的源码根目录,如果没有的话下载新的源码 http://nginx.org tar xvzf nginx-1.3.2.tar.gz 查看ngixn版本极其编译参数 /usr/local/nginx/sbin/nginx -V 进入nginx源码目录 cd nginx-1.3.2 以下是重新编译的代码和模块 ./configure --prefix=/usr/local/nginx--with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module make 千万别make install,否则就覆盖安装了 make完之后在objs目录下就多了个nginx,这个就是新版本的程序了 备份旧的nginx程序 cp /usr/local/nginx/sbin/nginx/usr/local/nginx/sbin/nginx.bak 把新的nginx程序覆盖旧的 cp objs/nginx /usr/local/nginx/sbin/nginx 测试新的nginx程序是否正确 /usr/local/nginx/sbin/nginx

1.UEFI-edk2 开发环境搭建

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-08 09:44:16
EDK2是UEFI使用比较广泛的开源实现,支持在多种操作系统平台下进行开发。为了开发调试方便,这里采用在win10下用visual studio进行UEFI的开发。VS号称地表Top one的IDE,功能强大自不在话下,开发起来往往起到事半功倍的效果。此篇博客我们完成edk2源码的开发编译环境的搭建,同时编译运行一个模拟器,用来测试efi程序。 一、相关工具安装 首先下载安装vs2017或者vs2015,安装组件里面勾选上“使用C++的桌面开发”这一项。 接着要下载 NASM工具 ,下载后建议安装到"C:\NASM"目录下。 最后下载安装 IASL工具 ,下载后建议安装到"C:\IASL"目录下。 安装完成后,需要配置下环境变量,在Path环境变量里面添加IASL的安装路径,如下图所示。 还需要创建一个新的环境变量NASM_PREFIX,变量的值设置为NASM的安装路径。 二、编译basetools 在 edk2 github项目主页 上下载edk2的源码包,通过Win+R -> cmd打开windows下的命令行,cd到edk2的源码目录下,输入如下命令编译basetools。 edksetup.bat Rebuild 编译完成后会在 $(edk2-base)\BaseTools\Bin\Win32 目录下生成一些工具,这个工具会在后续编译efi工程的时候使用到。 三

qt环境搭建

你说的曾经没有我的故事 提交于 2020-03-08 09:41:05
QT开发&QT应用运行用到的QT库: Linux X64平台Qt Creator开发&应用运行用到的Qt库: https://download.csdn.net/download/wanvan/10695824 ARM64平台应用运行用到的Qt库: https://download.csdn.net/download/wanvan/10695879 QT Library配置须知: 直接下载使用我上面提供的编译好的Qt库,需要正确配置才能正常使用。 可能出现的问题: 问题1:移入我编译的QT库至Ubuntu下的QT Creator中时,可能QT Creator中会提示“Qt version is not properly installed,please run make install”的问题。 该提示就是说,Qt没有被正确安装,请运行make install这个问题是比较常见的一个。 出现此问题的原因就是:qmake.exe是在Qt安装编译时生成的,里面内嵌了Qt相关的一些路径。如果直接拷贝过来使用,自己的路径结构与原来不同,则Qt库就不能正常使用。提示就是Qt version is not properly installed,please run make install Qt没有被正确安装,请运行make install。 既然路径信息是内嵌在qmake.exe中了

解释型语言与编译型语言的区别?

岁酱吖の 提交于 2020-03-08 08:02:25
编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。 解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。 C/C++ 等都是编译型语言,而php,Java,C#等都是解释型语言。 虽然Java程序在运行之前也有一个编译过程,但是并不是将程序编译成机器语言,而是将它编译成字节码(可以理解为一个中间语言)。 在运行的时候,由JVM将字节码再翻译成机器语言。 注:脚本语言一般都有相应的脚本引擎来解释执行。 他们一般需要解释器才能运行。javascript,asp,php都是脚本语言。C/C++编译、链接后,可形成独立执行的exe文件。 脚本语言是一种解释性的语言,例如javascript,php等等,它不象c\c++等可以编译成二进制代码,以可执行文件的形式存在. 脚本语言不需要编译,可以直接用,由解释器来负责解释。 编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话 就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序 执行效率高。 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写 的程序。