VC6.0编译器连接器参数自定义

     我实习的时候,有个哥们曾经跟我说:“一个普通程序员强力不强力,不在于他能写出多么长的代码;多么逻辑严谨,无BUG;抑或是能自行写底层的东西,而且一写是一大片。”他说这已经是个工业社会了,“君子生非异也,善假于物也!!!现在某种程度上看你牛逼不牛逼,就是看你会用多少程序库。看你的能力,就是当头儿布置下一个任务,看你能在最快时间里用成熟的技术最快的解决的这个问题,并且还要炫还要稳。所以程序员要积累自己的程序库;以后比方说要处理视频方面了,就调出自己的视频这块的代码库。要搞算法的话,就使用算法库。这样你就能胜任各方面的功课和项目了”

 

       扯远了,不过上面这段话对我影响很大,本人深以为然也。牛顿都说自己是站在巨人的肩膀上,所以我们当然要学习利用别人的成果,在此之上进行开发编码。

       我也用过几个库,directx,ogre,xtreme toolkit等等,有些是开源,直接提供源代码,有些是只提供库文件(lib,dll),而自己在应用程序中引用连接。常常遇到一些莫名其妙的错误,以前碰到这种编译或者连接的问题非常非常痛苦,我有这样的经历,碰到此类问题后在网上苦苦搜索,耗费无数的时间,还不知所谓。

       我想我应该改变这个处理问题的模式,不能每次用个库都这么麻烦。经过一段时间的摸索以后,我发现这主要是编译器和连接器设置的问题。只要设置配置好,一切编译连接难题都迎刃而解,现把我的经验分享如下(以VC6.0为例):

 

1)      首先比如说用MFC42 他有MFC42ud.lib,MFC42u.lib,MFC42d.lib,这些库有什么区别?记住关键字即可,u代表unicode版本,d表示DEBUG版本。

2)      Build菜单的configuration选项中有两个选项,releasedebug;

Build菜单的set active configuration 选项点积进去可以选择当前需要编译debug还是release版本。

3)      常常我们需要引用程序库中的一些头文件和lib,但是程序库安装在一定的文件系统位置,我们直接在.cpp或者.h中是这样使用的。

#include “xxx.h” 或者 #include <xxx.h>前者是在工程目录下寻找头文件,后者是在操作系统环境变量下寻找头文件。

显然是没有程序库的正确位置去读取这些头文件,有一种最笨的方法是这样子:

#include “../../../document/doc1/doc2/XXX/xxx.h”这样用相对路径或者绝对路径去包含头文件。显然这样做的坏处非常明显,那就是要写的路径长;并且,当改变你的代码位置,或者改变程序库的安装位置,那么你就要修改这串代码,非常不好。另一种办法是Tools菜单的Options选项。其中Directories选项卡下可以添加include , library的包含路径,就相当于设置了环境变量,以后编译器会在那些路径下寻找.lib .h文件了。

在图中可以看到MFCheadDirectxhead的路径都在include filespath下。

 

     

 

4)以下是重头戏,在ProjectSetting选下中:

1

 

General选项卡下可以选择使用不使用MFC类库,static Library还是shared DLL方式连接

Intermediate files 是放一些中间的编译文件的,比方说.obj , .pdb(project database)等等。

Output files存放的编译连接以后的可执行文件的位置。

 

2C/C++是编译器的主要设置选项卡。

Project Options是编译器的设定Command. 最好是通过上面的Category下拉中去设定各项。

     

 

General中的Preprocessor definitions 下面这些很牛逼,就是预定义变量:

WIN32是代表WIN32程序,_DEBUGdebug代码,_AFXDLLMFCdll,_MBCS大家猜到了吧,哈哈,是的,是字符串编码。_MBCS采用多字节,如果预定义这项,那么如果使用MFC,使用的是MFC42D.dll 若是把_MBCS改换成_UNICODEUNICODE,那么把就是UNICODE编码,使用的连接是MFC42ud.dll , 强悍吧 !!!!

       Precompiled Headers选项卡:

 

 

这里的Through header 选择是stdafx.h ,哈哈,这个牛逼啊!因为stdafx.h往往放的是很大的头文件(数千行),并且这些头文件不需要被修改(程序库的头文件)。如果每次#include 到你的代码文件中,原文替换的话,需要重复编译很多的代码,工作量很大,速度慢。所以采用预编译的技术,编译成.pch,以后直接去把这段代码放到其他的源文件里面去即可。这个字段很重要。如MFCstdafx.h里面就包含afxwin.h的,而afxwin.h中包含windows.h这个巨无霸。

       Preprocessor选项卡中:

 

请注意这个Additional include directories,哈哈,想到什么了,是不是跟前述的3)一致呢,强悍吧!

 

3、有关链接器的参数设置在Link选项卡中。

       General中:

 

 

Link incrementally据说是增量连接,可以使连接速度加快。

       Input选项卡可以选择Additional library directories,同上

       Output选项卡的Entry_point Symbol则是starup code 的入口点 WinMain? Main? Wininit?

 

 

5OK了,以上就是我当前想到的一些设置,以后想到的话会继续补充;另外VS2008的设置只不过布局不同,选项大同小异,可以举一反三。最后希望这篇文章给自己增加记忆并且给大家帮助。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值