none
有关导入库的一些疑问 RRS feed

  • 问题

  •       今天研究sqlite库。发现要生成sqlite导入库,只有使用VS自带的lib工具。我新建了一个空的win32 dll工程,把sqlite库的所有源码和def文件加进去,结果编译只生成一个dll文件,没有lib文件生成。为什么没有lib文件生成呢?这是我的第一个疑问。

         其次我发现使用VS自带的lib工具来生成导入库,但输入参数主要是def文件以及机器环境等,这岂不是说明导入库没有debug版本和release版本之分?从导入库的定义来看,导入库只包含了地址符号表等似乎也印证了这一点。那么我的第二点疑问是为什么很多时候编译Win 32 dll工程或MFC dll工程,生成的debug版本的导入库和release版本的导入库的文件大小有差异? 按理说,生成的debug版本的导入库和release版本的导入库大小应该一致的,或者可以是混用的。但是实际上我们看到二者文件的大小还是不一样的,虽然一般来说相差不大。为什么会有这种差异呢?


    前无古人,后无来者

    2012年3月24日 7:08

答案

  • clever101你好!

    据我所知,有两种形式的后缀为.lib的文件,一种是静态链接库(static link library),另一种是动态链接库(dynamic link library)的导入库。如果.dll文件有导出函数或者类的话,那么在生成项目的时候,就会有一个相应的.lib文件生成。

    导入库有debug 和release版。这取决于你在生成项目是所选用的相关配置。一般而言,release版本的文件比debug版的要小,这是因为release版在生成的时候,做了很多优化,去掉了调试信息和异常判断。而debug版都保留有调试信息和异常判断。如果文件很小的话,可能这个大小的差别不是很明显。

    希望我的回复对你有所帮助!
    祝你好运!


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Helen Zhao 2012年4月3日 1:42
    2012年3月26日 1:36

全部回复

  • clever101你好!

    据我所知,有两种形式的后缀为.lib的文件,一种是静态链接库(static link library),另一种是动态链接库(dynamic link library)的导入库。如果.dll文件有导出函数或者类的话,那么在生成项目的时候,就会有一个相应的.lib文件生成。

    导入库有debug 和release版。这取决于你在生成项目是所选用的相关配置。一般而言,release版本的文件比debug版的要小,这是因为release版在生成的时候,做了很多优化,去掉了调试信息和异常判断。而debug版都保留有调试信息和异常判断。如果文件很小的话,可能这个大小的差别不是很明显。

    希望我的回复对你有所帮助!
    祝你好运!


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 Helen Zhao 2012年4月3日 1:42
    2012年3月26日 1:36
  • clever101你好!

    据我所知,有两种形式的后缀为.lib的文件,一种是静态链接库(static link library),另一种是动态链接库(dynamic link library)的导入库。如果.dll文件有导出函数或者类的话,那么在生成项目的时候,就会有一个相应的.lib文件生成。

    导入库有debug 和release版。这取决于你在生成项目是所选用的相关配置。一般而言,release版本的文件比debug版的要小,这是因为release版在生成的时候,做了很多优化,去掉了调试信息和异常判断。而debug版都保留有调试信息和异常判断。如果文件很小的话,可能这个大小的差别不是很明显。

    希望我的回复对你有所帮助!
    祝你好运!


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us

           严重怀疑你的说法。导入库只包含了地址符号表等。我试过把debug版本的导入库作为release版本的导入库使用,一点问题都没有。


    前无古人,后无来者

    2012年3月27日 13:39