vc连接和编译
1. 在使用VC时为什么编译时没有错误,连接时有错误,不能打开文件
我们通常所说的编译其实包含两个部分:编译和链接。
编译是指把程序源文件编译成目标文件,即vc下的.o文件。
链接是指把目标文件生成可执行文件。
链接的时候,如果某个函数只有声明,但没有实现,或者依赖第三方库,但只提供了头文件,没有提供库文件,或者库文件的版本不对,都会导致链接错误,而这些错误,在编译阶段通常是不会报错的。所以,你可以针对上面提到的几点一一排除一下:
1,程序中所用到的自己写的函数是否都已经实现;
2,如果使用了第三方库,确认是否已经有了第三方库,是否在工程设置中包含了库文件,并且配置了库文件搜索路径,保证编译器能找到所需要的库文件;
3,如果使用了第三方库,确认所使用的库文件版本是对的。
如果上面这些都做好,基本上就不会有问题了。
2. 电脑编程的基础知识——编译器和连接器
我从没见过(不过应该有)任何一本C++教材有讲过何谓编译器(Compiler)及连接器(Linker)(倒是在很老的C教材中见过),现在都通过一个类似VC这样的编程环境隐藏了大量东西,将这些封装起来。在此,对它们的理解是非常重要的,本系列后面将大量运用到这两个词汇,其决定了能否理解如声明、定义、外部变量、头文件等非常重要的关键。
前面已经说明了电脑编程就是一个“翻译”过程,要把用户的程序翻译成CPU指令,其实也就是机器代码。所谓的机器代码就是用CPU指令书写的程序,被称作低级语言。而程序员的工作就是编写出机器代码。由于机器代码完全是一些数字组成(CPU感知的一切都是数字,即使是指令,也只是1代表加法、2代表减法这一类的数字和工作的映射),人要记住1是代表加法、2是代表减法将比较困难,并且还要记住第3块内存中放的是圆周率,而第4块内存中放的是有效位数。所以发明了汇编语言,用一些符号表示加法而不再用1了,如用ADD表示加法等。
由于使用了汇编语言,人更容易记住了,但是电脑无法理解(其只知道1是加颂隐法,不知道ADD是加法,因为电脑只能看见数字),所以必须有个东西将汇编代码翻译成机器代码,也就是所谓的编译器。即编译器是将一种语言翻译成另一种语言的程序。即使使用了汇编语言,但由于其几乎只是将CPU指令中的数字映射成符号以帮助记忆而已,还是使用的空迹电脑的思考方式进行思考的,不够接近人类的思考习惯,故而出现了纷繁复杂的各种电脑编程语言,如:PASCAL、BASIC、C等,其被称作高级语言,因为比较接近人的思考模式(尤其C++的类的概念的推出),而汇编语言则被称作低级语言(C曾被称作高级的低级语言),因为它们不是很符合人类的思考模式,人类书野亏厅写起来比较困难。由于CPU同样不认识这些PASCAL、BASIC等语言定义的符号,所以也同样必须有一个编译器把这些语言编写的代码转成机器代码。对于这里将要讲到的C++语言,则是C++语言编译器(以后的编译器均指C++语言编译器)。
因此,这里所谓的编译器就是将我们书写的C++源代码转换成机器代码。由于编译器执行一个转换过程,所以其可以对我们编写的代码进行一些优化,也就是说其相当于是一个CPU指令程序员,将我们提供的程序翻译成机器代码,不过它的工作要简单一些了,因为从人类的思考方式转成电脑的思考方式这一过程已经由程序员完成了,而编译器只是进行翻译罢了(最多进行一些优化)。
还有一种编译器被称作翻译器(Translator),其和编译器的区别就是其是动态的而编译器是静态的。如前面的BASIC的编译器在早期版本就被称为翻译器,因为其是在运行时期即时进行翻译工作的,而不像编译器一次性将所有代码翻成机器代码。对于这里的“动态”、“静态”和“运行时期”等名词,不用刻意去理解它,随着后续文章的阅读就会了解了。
编译器把编译后(即翻译好的)的代码以一定格式(对于VC,就是COFF通用对象文件格式,扩展名为.obj)存放在文件中,然后再由连接器将编译好的机器代码按一定格式在Windows操作系统下就是Portable Executable File Format--PE文件格式)存储在文件中,以便以后操作系统执行程序时能按照那个格式找到应该执行的第一条指令或其他东西,如资源等。至于为什么中间还要加一个连接器以及其它细节,在后续文章中将会进一步说明。
3. 在VS2010的VC++中如何编译、链接、运行、调试程序
看图说话!
4. 我想请问一下我用VC++6.0 写的程序每次都要编译一次 然后在连接一次 然后在运行。
编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制,机器代码一般以*.obj文件保存。
链接就是将上一步产生的obj文件与操作系统动态库组合为可执行的exe文件.
具体为什么这样麻烦,你可以参考《程序设计语言-编译原理》- 国防工业出版社
5. Visual Studio 2010中的Visual C++如何编译、连接和运行
1.首先打开vs2010,选择“visualc++开发设置”,点击“”启动visualStudio。
6. 我在考试 求助:vc++中如何建立、编译和运行包含多个文件的程序,写出步骤
兔子好,我是zkill^_^
*建立和运行包含多个文件的程序的方法*/
情形:一个程序包含多个源程序文件,则需要建立一个项目文件(project file),在这个项目文件中包含多个文件(源文件和头文件)。项目文件是放在项目工作区中的,因此还要建立项目工作区。在编译时,系统会分别对项目文件中的每个文件进行编译,然后将所得到的目标文件连接成为一个整体,再与系统的有关资源连接,生成一个可执行文件,最后执行这个文件。
实际操作时有两种方法:(1)由用户建立项目工作区和项目文件;(2)用户只建立项目文件而不建立项目工作区,由系统自动建立项目工作区。
1.由用户建立项目工作区和项目文件
1.1将同一程序中的各个源程序文件,存放在指定目录(最好是一个,好找)下:如将file1.c file2.c file3.c file4.c保存在D:\CC子目录下。
1.2建立一个项目工作区。File|New|Workspaces : Workspace name -> ws1 Location -> D:\CC(或其他目录)|OK
1.3建立项目文件。File|New|Project -> Win32 Console Application : Project name -> project1 Location: D:\CC\WS1\project1|OK(选中Add to current workspace) -> An empty project
1.4将源程序文件放到项目文件中。Project|Add To Project|Files -> Insert Files into Project : 选中File1.c File2.c File3.c File4.c -> OK
1.5编译和连接项目文件: Build|Build project1.exe
1.6执行可执行文件: Build|Execute project1.exe ———————————————————OVER
参考下吧不一定对
7. VC中编译与连接有什么区别
要连接要先编译,如果没编译会连接时会自动编译。举个例子,如果你有两个文件,对一个文件进行编译只是讲这个文件编译成了目标文件.obj,但是另外一个文件没有,需对另外一个文件进行编译,可以观察结果输出框的显示,这时连接便会将两个文件连接在一起,才会将互相调用的函数等联系起来,生成.exe。如果不编译直接点连接,系统自动将两个文件编译,并连接,生成.exe文件。
假设两个文件分别是a.cpp,b.cpp,a调用b的函数:
编译a:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
a.cpp
a.obj - 0 error(s), 0 warning(s)
然后编译b:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
b.cpp
b.obj - 0 error(s), 0 warning(s)
然后连接:
--------------------Configuration: a - Win32 Debug--------------------
Linking...
a.exe - 0 error(s), 0 warning(s)
假如编译一个后直接连接:
编译a:无变化
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
a.cpp
a.obj - 0 error(s), 0 warning(s)
直接连接:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
b.cpp
Linking...
a.exe - 0 error(s), 0 warning(s)
如果两个都不编译,直接点连接:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
a.cpp
b.cpp
Linking...
a.exe - 0 error(s), 0 warning(s)
注意:假如文件没有被修改的话,编译一次后不会再进行编译了,可以直接连接,如果这时不编译,直接点连接,也只是连接,没有编译过程。
编译.h文件会提示不能编译,因为.h一般存放的是函数的声明,类的定义等,系统不会编译,但是可以在头文件中点连接进行整个程序的编译连接过程。
连接后就可以运行了,也可以在没编译、连接时点运行,系统会自动编译、连接。