• 做一个幸福的人,读书,旅行,努力工作,关心身体和心情。
  • 不管有没有人爱,也要努力做一个可爱的人。不埋怨谁,不嘲笑谁,也不羡慕谁,阳光下灿烂,风雨中奔跑,做自己的梦,走自己的路。

关于lib的几个问题

Lua编程 lcq 5年前 (2013-10-14) 628次浏览 0个评论

最近在研究《Lua游戏开发实践指南》里面源码的时候,我需要运行调试里面TakeAway这个游戏,由于源码给的解决方案下面有很多的项目。加之这个需要一些dx库文件支持,出现了很多的文件找不到以及lib文件找不到,所以做个小小的备忘录,记录一下当时遇到的问题。下面是我要记录的几个方面的问题。

1、什么是lib

2、lib与dll文件的区别

3、将TakeAway运行起来的步骤


1、什么是lib

“在早期库的组织形式相对简单,里面的目标代码只能够进行静态链接,所以我们称为“静态库”,静态库的结构比较简单,其实就是把原来的目标代码放在一起,链接程序根据每一份目标代码的符号表查找相应的符号(函数和变量的名字),找到的话就把该函数里面需要定位的进行定位,然后将整块函数代码放进可执行文件里,若是找不到需要的函数就报错退出。”    如何引用lib?    ①通用。格式如:#pragma comment(lib,”XXX.lib”)    ②针对开发环境:1、如果使用VC,可以在Project Setting–>Link中加入你的静态库,也可以直接把该.lib文件加入到你的工程中。2、如果使用Visual Studio,位置在 项目→配置属性→连接器→输入→附加依赖项 中加入.lib文件静态链接库不同于动态链接库(*.dll),在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为*.LIB),Visual C++的编译器在链接过程中将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。这个过程称为”静态链接”,此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。


2、lib与dll文件的区别

静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。


3、将TakeAway运行起来的步骤

由于一个解决方案后面有多个项目,系统默认的是“单启动项目”,如下图所示。所以首先要将单启动项目改为当前选定内容。步骤就是在“解决方案”下面单机鼠标右键,进入属性页面即可更改。

   接下来用鼠标点击“Take Away”项目,编译“Take Away”,会出现如下编译错误:“ fatal error C1083: 无法打开包括文件:“d3dx9.h”: No such file or directory”很明显,这是没有找到这个文件,需要将dx的include目录包含进来。在“Take Away”项目上用鼠标点右键进入属性页面,根据如下图所示即可解决该编译问题。

当时用上述的办法将dx文件夹包含进来还是有问题,在电脑的环境变量下面找到dx的变量才解决该问题,电脑的环境变量如下图所示:

这样,将dx下的文件include包含到“包含目录”下面,只需要将“C:Program FilesMicrosoft DirectX SDK %28”替换成“$(DXSDK_DIR)Include;”即可。

接下来会有“LINK : fatal error LNK1181: 无法打开输入文件“E:WorkDocumentCodeLuaGameluaDebuglua.lib”的链接错误,只需要将该解决方案的项目生成lib文件即可。生成lib的文件过程中也会出现上述问题,按照上述的方法解决即可。

然后还会提示一个“LINK : fatal error LNK1104: 无法打开文件“d3dx9.lib”这个lib文件是属于dx里面的,将dx里面的x86文件夹加到“VC++ 目录”下面的“库目录”下面即可。

最后,截一张Take Away游戏的截图。


乐趣公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于lib的几个问题
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址