http://www.hellodsp.com/bbs/forum.php?mod=viewthread&tid=17612
今天在群里讨论了关于lib,受益匪浅,类似的把东西总结一下,希望以后大家遇到这样的问题后,能很容易的解决。在此也练一下笔法,从小就讨厌写东西,今天试一试,有不足之处还请大家见谅。
帮助留的第二个问题,我们好多学员都在群里讨论了,收获很多,我就把讨论的内容和论坛上以前别人发的一部分内容总结的写一下。
.lib文件是库文件,寄存器地址和对应的标示符定义都包含在这个库里面了,里面包括标准的C/C++运行支持库函数,浮点运算程序,系统启动程序_c_int00 等,这些库中也包括由汇编实现的子程序,可以在汇编中调用,比如除法子程序 FD$$DIV等。从编程的角度讲,通常有静态库文件和动态库文件。静态库文件就是.lib文件,动态库文件就是.dll文件。内容一样,都是将函数封装在一起编译后供自己或他人调用。好处在于编译后的库文件看不到源代码,可保密;同时不会因为不小心修改了函数而出问题,便于维护。
两种库的区别在于静态库被调用时直接加载到内存,而动态库再是在需要的时候加载到内存,不使用的时候再从内存释放。
对于dll与lib的解释,002+吻之龙<
longzebiao@qq.com> 给出了相信的解释
1)lib是编译时需要的,dll是运行时需要的。
如果要完成源代码的编译,有lib就够了。
如果也使动态连接的程序运行起来,有dll就够了。
在开发和调试阶段,当然最好都有。
(2) 一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。
" O3 ~: A- ~! ^$ C7 {& j1 Z(3)在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。
当你打开ccs里的库文件函数时你就会发现有好多个库文件函数,不知道怎么用,我查了好多资料,也没查出个什么来,只查到了这些感觉有用的
For C28x these libraries can be built:
• rts2800.lib (C/C++ run-time object library)
• rts2800_ml.lib (C/C++ large memory model run-time object library)
• rts2800_eh.lib (C/C++ run-time object library with exception handling support)
• rts2800_ml_eh.lib (C/C++ large memory model run-time object library with exception handling support)
• rts2800_fpu32.lib (C/C++ run-time object library for FPU targets)
• rts2800_fpu32_eh.lib (C/C++ run-time object library for FPU targets with exception handling support)
当你把别人的东西拷到你的电脑后,运行时就会出现错误,提示
undefined first referenced
2 @! x! w% K8 }9 m: V* L' p; Y( Q symbol in file
7 C5 Z1 p: Z: n3 t6 J1 w3 ~--------- ----------------
& p$ h1 a! @: s/ ~' ]) n/ t( MFS$$MPY C:dspprogpioDebugDSP28_CpuTimers.obj
f% L+ b$ Q" T; e4 uFS$$TOL C:dspprogpioDebugDSP28_CpuTimers.obj
这种错误主要是DSP28_CpuTimers.obj没有连上,解决方法一:在ccs软件的工程下的Libraries下先移除rts2800.lib,然后右击选择CCStudio_v3.3C2000cgtoolslib下的rts2800.lib就可以了,解决方法二:133+sowellwww<
sowellwww@foxmail.com>:rts2800_ml.lib是系统自带的,只要在option里面包含就可以了,不需要单独再往里面加了,就好像C语言里写头文件一样,#include
,我们不需要再专门把这个文件找出来加进去,只要定义过了,系统会自动为你添加的,而像其他的lib,比如IQmath.lib不是系统里有的,这种要自己添加进去才能使用,同样用C语言头文件包涵为例#include "IQmathLib.h" 这个文件就一定要添加进去才能使用。具体操作:你project菜单下的build option下的link里的libraries里的incl:libraries里输入你所用的lib,就可以了