VC做工程的时候,project->setting里选used in a shared dll 和used in a static library有什么区别,我听说用static library生成的程序到没有安装vc的电脑上也可运行,可是我编的一个程序(用static library)如果在没有安装VC的电脑上运用就会报错说"没有找到MSVCRTD.dll",怎么回事?
...全文
88811打赏收藏
static library 与shared dll 有什么区别?
VC做工程的时候,project->setting里选used in a shared dll 和used in a static library有什么区别,我听说用static library生成的程序到没有安装vc的电脑上也可运行,可是我编的一个程序(用static library)如果在没有安装VC的电脑上运用就会报错说"没有找到MSVCRTD.dll",怎么回事?
used in a static library:
比如你用到这个库里的函数,这些函数代码(二进制代码)都拷贝到你的代码程序里来了,所以运行时可以直接找到这些函数,所以可以在没有这些库的机器上运行
used in a shared dll:
当你用到这些库里的函数时,这些函数代码并没有被拷贝到你的程序中来,而是把这些函数是属于哪个库及它们在库中的地址等信息记录下来。。。所以当你的程序运行时,当用到这些函数时,会根据已记录下的信息把函数所属的库加载进地址空间来,再找到要运行的函数地址,这样才可以运行。。。
所以运行你的程序的机器必须要有这些函数所属的库
是的我是用的static library方式,编译成release版本,刚刚才又试的。不过我用static library和
shared dll出来的可执行文件的大小一样。另外还有一个警告,不知道和这个问题有没有关系.
msvcrt.lib(cinitexe.obj) : warning LNK4098: defaultlib "msvcrtd.lib" conflicts with use of other libs; use /NODEFAULTLIB:library