程序终于实现跨机器运行——记VC++2005程序开发的一个常见问题
最近经常被同学笑话说天天都在说我的程序可以跨平台,结果连跨机器都不行~~~这还得“归功”与VS2005的运行库和manifest作怪。
在VS2005里面编译的程序默认的配置是“多线程DLL”,其实也就是动态链接运行库的DLL,文件小,但需要客户机安装运行库。还有一个选项是“多线程”,这个选项就是静态链接运行库,文件大,优点是不需客户机安装运行库。
现在编译我的程序为release以便在客户机上使用,按照默认的的“多线程DLL”链接编译。直接把EXE文件和相关的DLL文件复制到客户机,无法使用,提示“应用程序配置不正确…………”。这令人很尴尬,在网上搜索找到三种解决方案:
1、所有的库和应用程序都使用静态链接。但这样导致的问题就是N多的链接错误,对于我来说OpenSceneGraph的库的osgCore就有1000多个链接错误~~。即便是链接成功,文件也会异常的大。除非是小工程,而且不需要外来库,可以选择这个方法,直接拷贝EXE就可以用。
2、制作安装包。此法看了后感觉很复杂~~略去。
3、在客户机上安装vc运行库分法包,也就是位于C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86里面的文件。
方法三对于普通的大工程比较实用,包括AUTOCAD2006都是这样的方式。
最开始我用的是微软官方下载的vcredist_x86,但是很郁闷,还是提示“应用程序配置不正确……”,后来用安装的SDK目录里面的(就是上面那个路径)vcredist_x86.exe就对了。想必可能是我的VS2005是SP1,这个发行包已经更新。所以建议直接从SDK目录里面提取。
最后就在客户机上安装了vcredist_x86,拷贝必要的OpenSceneGraph的DLL,执行我的程序就对了!
其实中间还很费周折,最开始为了编译成一个静态链接的库,我反复测试编译OpenSceneGraph的Release版本,结果每次都是各种各样的链接错误,要不就是找不到函数,要不就是函数重定义。还好中间老蒋来找我出去刚了一圈,回来头脑清醒了一些,运气也来了,问题也就找到了。
下一个任务就是测试一下能不能跨平台了,呵呵,Linux,等着吧!
在VS2005里面编译的程序默认的配置是“多线程DLL”,其实也就是动态链接运行库的DLL,文件小,但需要客户机安装运行库。还有一个选项是“多线程”,这个选项就是静态链接运行库,文件大,优点是不需客户机安装运行库。
现在编译我的程序为release以便在客户机上使用,按照默认的的“多线程DLL”链接编译。直接把EXE文件和相关的DLL文件复制到客户机,无法使用,提示“应用程序配置不正确…………”。这令人很尴尬,在网上搜索找到三种解决方案:
1、所有的库和应用程序都使用静态链接。但这样导致的问题就是N多的链接错误,对于我来说OpenSceneGraph的库的osgCore就有1000多个链接错误~~。即便是链接成功,文件也会异常的大。除非是小工程,而且不需要外来库,可以选择这个方法,直接拷贝EXE就可以用。
2、制作安装包。此法看了后感觉很复杂~~略去。
3、在客户机上安装vc运行库分法包,也就是位于C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86里面的文件。
方法三对于普通的大工程比较实用,包括AUTOCAD2006都是这样的方式。
最开始我用的是微软官方下载的vcredist_x86,但是很郁闷,还是提示“应用程序配置不正确……”,后来用安装的SDK目录里面的(就是上面那个路径)vcredist_x86.exe就对了。想必可能是我的VS2005是SP1,这个发行包已经更新。所以建议直接从SDK目录里面提取。
最后就在客户机上安装了vcredist_x86,拷贝必要的OpenSceneGraph的DLL,执行我的程序就对了!
其实中间还很费周折,最开始为了编译成一个静态链接的库,我反复测试编译OpenSceneGraph的Release版本,结果每次都是各种各样的链接错误,要不就是找不到函数,要不就是函数重定义。还好中间老蒋来找我出去刚了一圈,回来头脑清醒了一些,运气也来了,问题也就找到了。
下一个任务就是测试一下能不能跨平台了,呵呵,Linux,等着吧!