我发现,一般发布VC程序的时候,都会包含一个VCxxxx再发布包。
如果MFC作为static library编译链接的话,就相当于有了一个拷贝到了exe里面,不再需要VCxxxxx再发布包了吧。
但是一般的安装程序像QQ之类的,都是会带一个再发布报的。那么是不是说,开发软件的时候一般都是shared dll模式?
什么时候会用到static library呢?
6 个解决方案
#1
一般电脑上都有的公共dll library,那么就用shared dll模式;
软件专属的dll library但又不想附带DLL文件,则static library模式。
软件专属的dll library但又不想附带DLL文件,则static library模式。
#2
发布运行文件多的话,就动态
如果你只有一个exe,那就静态
如果你只有一个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
使用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即可。
对于小型工程,static library即可。
#6
编译器选项
#1
一般电脑上都有的公共dll library,那么就用shared dll模式;
软件专属的dll library但又不想附带DLL文件,则static library模式。
软件专属的dll library但又不想附带DLL文件,则static library模式。
#2
发布运行文件多的话,就动态
如果你只有一个exe,那就静态
如果你只有一个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
使用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即可。
对于小型工程,static library即可。
#6
编译器选项