最近在参与一个wpf项目的时候,程序中要用到自定义的dll库,在本机上win10系统上调用的时候程序可以正常运行,但是发现在win7的电脑上调用时程序会异常崩溃,后来查阅资料发现是因为我的dll库需要依赖的动态库在win7的电脑上找不到而导致的。 找了网上的一些解决办法,最后发现将dll的项目属性改为静态连接是最好的解决办法 步骤如下:
打开dll项目——》选择项目-属性——》在属性页目录中选中c/c+±代码生成,将其中的运行库选项改为多线程(/MT),再重新编译-生成dll,这样生成的dll就包含了所需要的依赖库,便可以在没有所需依赖库的机器上运行
这里顺便解释一下运行库几个选项的含义:
在调试模式(debug)下,使用调试运行库:多线程调试(/MTd)、多线程调试DLL(/MDd)
在发布模式(release)下,使用发布运行库:多线程(/MT)、多线程DLL(/MD)
调试模式下运行库带d,但发布模式不带。调试与发布的区别在于,发布模式省略了程序的调试信息,简单来说就是删除了调试模式下的用于调试的内容,所以一般情况下,发布模式下生成的可执行文件的大小比调试模式下生成的要小
静态链接:多线程(/MT)、多线程调试(/MTd)
动态链接:多线程DLL(/MD)、多线程调试DLL(/MDd)
动态链接为D,静态链接为T。两者的区别在于,静态链接将程序所依赖的运行库集成到了可执行文件中,可执行文件运行时不再需要运行库;动态链接没有把程序所依赖的运行库集成到可执行文件中,可执行文件运行时需要运行库。由于静态链接将程序所依赖的运行库集成到了可执行文件中,一般情况下,生成的可执行文件的大小大于动态链接生成的
对比静态链接和动态链接下生成的dll发现,静态链接的dll要比动态链接的要大