将vs2008+qt4.6.2编译的程序放到没安装过vs2008和QT的XP机器上运行,遇到的问题。
1.vs2008需要一些库,在XP上没有这些库文件;
安装vcredist_x86.exe,拷贝安装过vs2008机器的C:\WINDOWS\WinSxS目录等方法,待总结。
2.QT4中文显示问题;
中文显示问题的解决:
首先编译的时候本机中文显示不了,需要加一段代码,设置QT的解码方法,代码如下:
QTextCodec *codec = QTextCodec::codecForName("GB2312");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
或者设置编码方式为GBK,这样在本机就可以显示中文了。
如果一直到未安装过QT的机器上,还需要拷贝GBK或GB2312的库文件,这些库在“C:\Qt\4.6.2\plugins\codecs”下,添加一句代码如下(添加解码的库文件路径):
QApplication::addLibraryPath(".\\plugins");
添加这句代码之后,将\plugins目录拷贝到编译的程序的运行目录下,这样程序就能正确加载该字体库了。
是否正确加载了字体库的测试代码:
QApplication a(argc, argv);
QApplication::addLibraryPath(".\\plugins");
QTextCodec *codec = QTextCodec::codecForName("GB2312");
QMessageBox::information( 0, "codec", QString::number((int)codec) );
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
如果messagebox弹出 “0”则表示加载字体库失败,非0则表示加载字体库成功。
3.VS2008预编译选项设置,在“通用配置——C/C++——预编译头”处进行设置,可以设置VS2008是否使用预编译头,昨天这个问题百度了2个多小时也没发现,哎,要认真、要仔细啊。
4.runtime Error问题。移植VC6的程序到VS2008,修改了程序的生成目录和工作目录,未修改生成数据库文件(pdb文件的路径)产生错误如下:
R6034
An application has made an attempt to load the C runtime library incorrectly.
Please contact the application's support team for more information
1.运用上述方法修改后,仍然不好用,继续google,发现在链接选项中忽略“msvcrt.lib”可以解决。
2.修改编译选项,将/MD或/MDd 改为 /MT或/MTd,这样就实现了对VC运行时库的静态链接,在运行时就不再需要VC的dll了。
此问题是vs2008的manifest的问题。参考
1.http://www.cppblog.com/deercoder/articles/101006.html
2.http://dearymz.blog.163.com/blog/static/2056574201101410252111/