我这里有个lib,文件很大,可以直接用,但是找不到对应的dll,所以想确认一下,是不是有的lib是不需要dll的?
谢谢。

解决方案 »

  1.   

    当然不需要必须有dll文件。静态的lib文件也是可以的。不过需要静态引入,不能动态调用了
      

  2.   

    .dll是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式,.dll还有其他的文件格式如.ocx等,所有的.dll文件都是可执行。.lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib文件,就必须:
    1  包含一个对应的头文件告知编译器lib文件里面的具体内容
    2  设置lib文件允许编译器去查找已经编译好的二进制代码如果你想从你的代码分离一个dll文件出来代替静态连接库,仍然需要一个lib文件。这个lib文件将被连接到程序告诉操作系统在运行的时候你想用到什么dll文件,一般情况下,lib文件里有相应的dll文件的名字和一个指明dll输出函数入口的顺序表。如果不想用lib文件或者是没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress。事实上,我们可以在Visual C++ IDE中以二进制形式打开lib文件,大多情况下会看到ASCII码格式的C++函数或一些重载操作的函数名字。
      

  3.   

    不是,lib有两种:
    Object Lib:含有二进制代码,如:stdlibc.lib。
    Entry Lib:仅含有函数在相应dll中的入口,如:ws2_32.lib。
      

  4.   

    sorry,不是stdlibc.lib,是libc.lib,也就是CRT所在的lib。
      

  5.   

    也就是说如果lib含有二进制代码,那么编译成exe后,不需要lib文件就可以独立运行了;而调用dll的exe文件就必须有dll才能运行。是不是这样的?
    另外,如果lib含有二进制代码,可否将它编译成dll来动态调用?
      

  6.   

    lib本身含有实现代码的话,作用其实就相当于多个obj的打包。
    上还是要吧exe和lib连接起来,如果这个lib不是每一台机器上都有的话,比如以前BC31的graphics库。
    不过有些开发环境可以帮用户把这件事情一气做完。
    我不清楚dll可否跟exe做静态链接。
    lib可否直接编成dll来用也不太清楚,继续关注
      

  7.   

    当然这个lib需要你静态的生成
      

  8.   

    VC里面用def文件可以方便地将lib导出为dll。
      

  9.   

    看你是静态还是动态,如果是静态,就不要dll, 否则就要lib and dll, 不知这样的回答能否对你有帮助◎——◎
      

  10.   

    如果是一个静态库,静态引入即可。
    如果是一个动态库的,就需要DLL