g++ 编译和链接(转)】的更多相关文章

gcc/g++ 编译与链接 编译与链接的过程可以分解为四个步骤:预处理.编译.汇编.链接 预处理:源代码文件和相关的头文件,被预处理器cpp预处理成一个后缀为 .i 的文件(选项:-E) 编译:把预处理完的文件进行一系列的词法分析.语法分析.语义分析以及优化后,产生相应的汇编代码文件,后缀为 .s,(选项 :-S ) 汇编:把编译阶段生成的 .s 文件转成二进制目标代码,后缀为.o,(选项:-c) 链接:把每个源代码模块独立地编译,然后按照要将它们"组装"起来.链接的主要内容就是把各个…
传统意义上的编译程序分两步走 —— 编译和链接: 1.编译(compile):指用编译器(compiler)将源代码(source code)生成二进制目标文件(object file),在Windows下也就是 .obj 文件,UNIX下是 .o 文件.编译时,编译器需要的是语法的正确,函数与变量的声明的正确,编译器只检测程序语法,和函数.变量是否被声明,函数并不需要被定义. UNIX下g++的语法为:        g++ -c file.cpp -c 是compile的意思,此命令将会生成…
在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库(*.a)与动态库(*.so)的生成与使用方式是不同的.刚开始可能会不适应,但是用多了应该会习惯这种使用,因为步骤上并没有VS下配置那么繁琐.下面就分别总结下linux下生成并使用静态库与动态库的方法:(由于是C++项目,所以编译器用的g++,但是与gcc的使用是相通的) 首先是准备工作,把我们需要…
测试程序test.cpp如下所示: #include <iostream> using namespace std; #define MAX 9 int main() { //just for test cout << MAX << endl; cout << "Hello world!" << endl; } g++编译主要分为四个阶段进行,即预处理(Preprocessing).编译(Compilation).汇编(Ass…
C++编程中相关文件后缀 1.单个源文件生成可执行程序 下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: /* helloworld.cpp */ #include <iostream> int main(int argc,char *argv[]) { std::cout << "hello, world" << std::endl; ); } 程序使用定义在头文件 iostream 中的 cout,向标准输出…
g++编译&&gdb调试&&coredump调试 一.编译注意细节 1.使用g++编译CPP文件如果用gcc编译C++源文件时,加以下选项:-lstdc++,否则使用了C++操作的文件编译会出错. 2.gcc/g++ 在执行编译时,需要4步 ①   预处理,生成.i的文件[使用-E参数] ②   将预处理后的文件把转换成汇编语言,生成文件.s[使用-S参数] ③   由汇编变为目标代码(机器代码)生成.o的文件[使用-c参数] ④   连接目标代码,生成可执行程序[使用-o…
编译器是一个神奇的东西,它能够将我们所编写的高级语言源代码翻译成机器可识别的语言(二进制代码),并让程序按照我们的意图按步执行.那么,从编写源文件代码到可执行文件,到底分为几步呢?这个过程可以总结为以下5步: 1.编写源代码 2.编译 3.链接 4.装载 5.执行 今天主要说明的过程是编译和链接是怎么进行的. 首先是编译,那么什么是编译?从广义上讲,编译就是将某种编程语言编写的代码转换成另一种编程语言描述的代码,严格一点儿来说,编译其实就是将高级语言编写的源代码翻译成低级语言(通常是汇编语言,甚…
gcc和g++现在是gnu中最主要和最流行的c&c++编译器.g++是c++的命令,以.cpp为主:对于c语言后缀名一般为.c,这时候命令换做gcc即可.编译器是根据gcc还是g++来确定是按照C标准还是C++标准编译链接. gcc和g++都是GNU(组织)的一个编译器.但两者有一些区别:后缀为.c的文件gcc把它当做c程序,g++当做c++程序.后缀为c++的两者都当做c++程序.对于cpp程序,无论gcc或者是g++编译阶段都是相同的,都是用的gcc进行编译,但是在链接阶段gcc不能自动和c…
参考博客: http://www.cnblogs.com/qytan36/archive/2010/05/25/1743955.html http://m.blog.csdn.net/article/details?id=24421919 一.GCC编译C源码有四个步骤:预处理-----> 编译 ----> 汇编 ----> 链接 四阶段作用:(对应文件后缀依次是:.i>.s>.o>.exe) >预处理 将引进的头文件的代码加入到当前文件中.选项"-E&…
gcc和g++都是GNU(组织)的一个编译器.        误区一:gcc只能编译c代码,g++只能编译c++代码      两者都可以,但是请注意:      1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序:后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的.C++的语法规则更加严谨一些.      2.编译阶段,g++会调用gcc,对于c++代码,两者是等价的,但是因为gcc命令不能自动和C++程序使用的库联接,所以通…
gdb调试c程序打不到断点的原因可能是编译c文件的时候没有加-g选项,-g选项是编译加debug信息的,不加是打不到断点的 g++编译cpp文件 g++ -g -c *.cpp       编译 g++ -g -o exec *.o   链接 或 g++ *.cpp -o exec g++编译生成.a 静态库文件,.so为动态库 gcc *.cpp -lcp-demangle -o exec 选项 -l (ell) 通过添加前缀 lib 和后缀 .a 将跟随它的名字变换为库的名字 libcp-d…
单个源文件生成可执行程序 下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: /* helloworld.cpp */ #include <iostream> int main(int argc,char *argv[]) { std::cout << "hello, world" << std::endl; return(0); } 程序使用定义在头文件 iostream 中的 cout,向标准输出写入一个简单的…
本文将有以下4个部分来讲如何使用g++编译调用dll的c++代码. 1.如何调用dll 2.动态链接和静态链接的区别 3.g++的编译参数以及如何编译调用dll的c++代码 4.总结 1.如何调用dll 动态链接库(Dynamic Link Library),简称DLL.DLL 是一个包含可由多个程序同时使用的代码和数据的库.它允许程序共享执行特殊任务所必需的代码和其他资源,一般来说,DLL是一种磁盘文件,以.dll..DRV..FON..SYS和许多以.EXE为扩展名的系统文件都可以是DLL.…
在平常的项目中,我们都是使用公司要求的makefile.makedebug一类的文件,因此,在编译.链接.生成和链接动态库与静态库的时候,我们只是简单的使用一些已经设置的变量,只是简单的修改.添加一些文件名,或许这次我们编译通过了,但是,在某一个时候,可能出现了一个问题,无论简单与否,因为平常没有留意,导致的结果可能是花了好长时间才能解决.而如果平常只是简单的留一下心,或许这些问题都是可以避免的. 因此,今天我自己使用几个文件,编译动态库.静态库以及动态库和静态库的嵌套调用等问题,尽量还原我在项…
目录 1.流程 2.操作 1.流程 .cpp-->.o-->.exe 分别为 源文件-->中间目标文件-->可执行文件 两个-->的过程分别为编译.链接 p.s.多个 .o 文件可以打包为库文件.lib文件 2.操作 文件地址为e:\a.cpp 内容为 #include <stdio.h> using namespace std; int main(void) { char c[10]; scanf("%s",c,9); printf(&quo…
目录 Setuptools CMake 最后决定选用pybind11,理由如下: 比python原生的C API看起来人性多了 我的C++代码不是现成的,需要一定的C++开发工作量,所以感觉cython不是很方便.如果C++接口已经给好了,只需要简单包装一下,Cython可能更好. pybind11声称只包含头文件,且能通过pip安装,感觉比boost_python轻量且最后这个扩展包容易分发.此外,感觉它的文档也比boost python友好不少-- Setuptools 参考官方的Setup…
1代码 点击查看代码 **sum.cpp** int gdata=10; int sum(int a,int b){ return a+b; } **main.cpp** extern int gdata; int sum(int , int ); int data=20; int main(){ int a =gdata; int b=data; int ret=sum(a,b); return 0; } 1:编译 需要关注的几个点 1: .o 文件的格式组成是什么样子? 2: .exe 文件…
第一次写技术博客,还有些兴奋呢.我是CrazyCatJack,大家可以叫我CCJ或者疯猫.我即将成为一名嵌入式Linux的驱动工程师,现在还是一枚大四狗,呼呼~大学期间做了一些项目和比赛,都是基于32位的MCU(例如STM32.Freescale K60),这些呢都是根据网上的视频,PDF自学的.现在想更进一步,学习一下嵌入式Linux.UCOS-II等嵌入式系统.因为给板子加系统是一个必然趋势,控制会越来越复杂,内容也越来越多的.有一个系统统筹管理是非常棒的选择.好了,废话少说,今天开始我的第…
3.5.2动态链接库的创建 3.5.2.1动态链接库的创建流程 动态链接库的创建流程如下图所示: 在系统设计阶段,主要的设计内容包括:类结构的设计以及功能类之间的关系,动态链接库的接口.在动态链接库中,包含两类函数:一类是内部函数,一类是外部函数.内部函数只能在动态链接库的内部使用,不能被动态链接库以外的模块调用:外部函数是该动态链接库的接口,可以被外部模块调用. 为了使外部函数能够被系统外的模块调用,在进行C++代码编写的时候,必须对外部函数执行导出.导出的级别有两种:函数级别的导出和类级别的…
2.1概述 在windows操作系统下,可执行文件的存储格式是PE格式:在Linux操作系统下,可执行文件的存储格式的WLF格式.它们都是COFF格式文件的变种,都是从COFF格式的文件演化而来的. 在windows平台下,目标文件(.obj),静态库文件(.lib)使用COFF格式存储:而可执行文件(.exe),动态链接库文件(.dll)使用PE格式存储.静态库文件其实就是一堆目标文件的集合. 在“WinNT.h”头文件中定义了COFF格式文件,以及PE格式文件的数据结构.这些定义是一系列的结…
本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 cl.exe是windows平台下的编译器,link.exe是Windows平台下的链接器,C++源代码在使用它们编译.链接后,生成的可执行文件能够在windows操作系统下运行.cl.exe和link.exe集成在Visual Studio中,随着开发工具Visual Studio的安装,它们也被安装到与VC相关的目录下. 使用该编译器的方式有两种,一种…
本文介绍一下如何使用Mac OS X自带终端快速创建.编译.链接OC程序. 1.打开终端 顺序:打开Finder——应用程序——实用工具——终端 2.打开需要存放 .m 文件的路径(比如我需要放到桌面,那么我就输入cd Desktop) 创建 .m 文件 (touch iOS开发——01_第一个OC程序.m) 打开 .m 文件 (open iOS开发——01_第一个OC程序.m ) 注:命令的空格不能省略 编写代码 3.进行编译链接 编译(cc -c iOS开发——01_第一个OC程序.m )回…
本文基本转自“Delphi编译/链接过程” @瓢虫Monster,向瓢虫君学习,:) 下图展示了Delphi是怎样编译源文件,并把它们链接起来,最终形成可执行文件的. 当Delphi编译项目(Project)时,将编译项目源文件.窗体单元和其他相关单元,在这个过程中将会发生好几件事情: 首先,Object Pascal编译器把项目单元文件编译为二进制对象文件(dcu): 然后资源编辑器将把诸如程序图标.窗体文件等资源编译成二进制资源文件: 接着链接开始起作用,链接器根据编译器产生的二进制文件,依…
先记录数据持久化. iOS客户端提供的常用数据持久化方案:NSUserDefaults代表的用户设置,NSKeydArchiver代表的归档,plist文件存储,SQLite数据库(包括上层使用的Core Data,FMDB). 每种方案都有各自的应用场景和范围,不能一概而论.不过可以大致以数据储存量和复杂度来区别. 除了以上提到的方案,再记录一种方案:LevelDB代表的键值对数据库. NSUserDefaults常用方法: 1.可以使用标准用户设置[NSUserDefaults standa…
在Linux里面混了一个多月,vim编程用得甚爽.无奈前天将Linux里面的编程文件夹误删,而技术不精无法找回,悲痛欲绝.再者,无限怀念windows里面的游戏,并觉得现在在Linux里面也学不到什么东西,遂决定回到windows. 回到windows里面第一件事就是想把Linux里面的vim完美移植到windows.花了两天功夫,大部分功能已基本能够实现.当中遇到的最大困难是在windows里面实现用gcc/g++编译调试c/cpp文件,现在就把我这个过程完整记录下来. 1,首先下载安装Min…
打了个指针版的treap,想用gdb调试,用gcc -g ×××.cpp -o a 时却报错了——直接用gcc编译却不会报错,提示:对‘operator new(unsigned int)’未定义的引用.... 试了几次用g++编译居然过了.. 大概c++程序本来就是用g++编译的吧..注意一下= =…
C++中的extern “C”用法详解     extern "C"表明了一种编译规约,其中extern是关键字属性,“C”表征了编译器链接规范.对于extern "C"可以理解成在C++/C中的混合编程的编译指令.用“C”来规约在C++中用C的方式进行编译和链接. extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的:其次,被它修饰的目标是“C”的.让我们来详细解读这两重含义. 1.    被exter…
gcc编译 gcc -o test.out test.c g++ 编译 g++ -o test.out test.cpp…
以下这三篇日志非常的好,真的非常的好.介绍使用gcc编译,链接,运行c程序. 1.http://lveyo.iteye.com/blog/240578 2.http://lveyo.iteye.com/blog/247013 3.http://lveyo.iteye.com/blog/250412…
C++应用程序在Windows下的编译.链接(一)概述 本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 cl.exe是windows平台下的编译器,link.exe是Windows平台下的链接器,C++源代码在使用它们编译.链接后,生成的可执行文件能够在windows操作系统下运行.cl.exe和link.exe集成在Visual Studio中,随着开发工具Visual Studio的安装,它们也被安…