这几天尝试拿WDK的库和编译器编译普通程序。目的是为了能链接到MSVCRT.DLL上去,减小自身程序体积。
很长时间了也没有人报有什么问题,自己是Win7的系统,其实也没有测试过XP下能不能使用。
但是很坑爹的是,事实证明不行……今天贴吧上有人报了XP下无法启动,报msvcrt.dll中找不到_except_handler4_common入口。
我检查了一下我编译出来的程序的导入表,果不其然有_except_handler4_common……
网上搜了一下,出来的基本都是说你把dwmapi.dll改名吧。但是我现在是导入表中直接有这一项,明显不是这个的问题。
之前就看网上有人说,Vista开始以后msvcrt.dll变得和原来不太一样。不过当时还没有太注意,没想到现在我给碰上了。
但是我编译的时候用的是wdk的xp free那个环境啊,为什么会出这种事。觉得略奇怪。
然后到7600.16385.1\lib\wxp\i386文件夹下找了找,
然后我把这个obj文件加到link的时候的那一堆obj中,编译出来的exe、dll的导入表中就没有_except_handler4_common了。
后续:
没有这个也没用。还是不能运行,提示_fseeki64入口找不到。找了找,这个函数出现在libvorbis里面。它里面居然有这样的代码
#ifdef __MINGW32__ return fseeko64(f,off,whence); #elif defined (_WIN32) return _fseeki64(f,off,whence); #else return fseek(f,off,whence); #endif
把中间#elif defined (_WIN32)那一行和它下面的那一行删掉或者注释掉,再编译,_fseeki64的依赖就没有了。
最终我虚拟机里装了个XP作为测试环境,试了一下终于可以了。