发布程序,什么时候会用到static library而不是shared dll呢?

时间:2022-09-16 16:00:32
VC的工程属性里面有Use MFC in a shared dll/static library.
我发现,一般发布VC程序的时候,都会包含一个VCxxxx再发布包。
如果MFC作为static library编译链接的话,就相当于有了一个拷贝到了exe里面,不再需要VCxxxxx再发布包了吧。

但是一般的安装程序像QQ之类的,都是会带一个再发布报的。那么是不是说,开发软件的时候一般都是shared dll模式?
什么时候会用到static library呢?

6 个解决方案

#1


一般电脑上都有的公共dll library,那么就用shared dll模式;
软件专属的dll library但又不想附带DLL文件,则static library模式。

#2


发布运行文件多的话,就动态
如果你只有一个exe,那就静态

#3


静态编译出来的程序很大的,基本不会采取这种方式的,如果是正式的软件,有安装包,都会带上VC++运行库的安装文件的。

只有想要实现“解压即可用”的时候才会采取静态编译吧。

#4


used   in   a   static   library:   
  使用lib文件。lib是已经编译好的二进制文件,可以与你的工程静态链接起来成为一个exe。 

  也是就是 比如你用到这个库里的函数,这些函数代码(二进制代码)都拷贝到你的代码程序里来了,所以运行时可以直接找到这些函数,所以可以在没有这些库的机器上运行  
    
  used   in   a   shared   dll:   
  使用dll文件,函数实现隐藏在DLL文件内部,你的工程编译成exe文件后,运行时才调用dll

  也就是说 当你用到这些库里的函数时,这些函数代码并没有被拷贝到你的程序中来,而是把这些函数是属于哪个库及它们在库中的地址等信息记录下来。。。所以当你的程序运行时,当用到这些函数时,会根据已记录下的信息把函数所属的库加载进地址空间来,再找到要运行的函数地址,这样才可以运行。。。   
  所以运行你的程序的机器必须要有这些函数所属的库


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yc_8301/archive/2009/02/04/3862645.aspx

#5


对于大型工程来说,一般都会shared dll,因为大型工程中很多工程共享一个函数库的情况很多。
对于小型工程,static library即可。

#6


编译器选项

#1


一般电脑上都有的公共dll library,那么就用shared dll模式;
软件专属的dll library但又不想附带DLL文件,则static library模式。

#2


发布运行文件多的话,就动态
如果你只有一个exe,那就静态

#3


静态编译出来的程序很大的,基本不会采取这种方式的,如果是正式的软件,有安装包,都会带上VC++运行库的安装文件的。

只有想要实现“解压即可用”的时候才会采取静态编译吧。

#4


used   in   a   static   library:   
  使用lib文件。lib是已经编译好的二进制文件,可以与你的工程静态链接起来成为一个exe。 

  也是就是 比如你用到这个库里的函数,这些函数代码(二进制代码)都拷贝到你的代码程序里来了,所以运行时可以直接找到这些函数,所以可以在没有这些库的机器上运行  
    
  used   in   a   shared   dll:   
  使用dll文件,函数实现隐藏在DLL文件内部,你的工程编译成exe文件后,运行时才调用dll

  也就是说 当你用到这些库里的函数时,这些函数代码并没有被拷贝到你的程序中来,而是把这些函数是属于哪个库及它们在库中的地址等信息记录下来。。。所以当你的程序运行时,当用到这些函数时,会根据已记录下的信息把函数所属的库加载进地址空间来,再找到要运行的函数地址,这样才可以运行。。。   
  所以运行你的程序的机器必须要有这些函数所属的库


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yc_8301/archive/2009/02/04/3862645.aspx

#5


对于大型工程来说,一般都会shared dll,因为大型工程中很多工程共享一个函数库的情况很多。
对于小型工程,static library即可。

#6


编译器选项