平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0
数据加载中……

Compiler warning

1.Wp64检测64位可移植性问题,导致warning( 4244,4267,4311,4312)
2.链接器 -> 优化 -> Windows98优化 去除,可省十几k.
3.msvcp60.dll和 msvcp71.dll是使用vc标准库时被连入的,即使使用了一个函数,也需要发布几百k的dll,非常的讨厌.对于Vc.net2003可以使用#define _STATIC_CPPLIB静态链接msvcrp.dll,消除dll引用.VC6需要改动内部实现代码,没有好的解决手法.若一个静态库使用了_STATIC_CPPLIB,所有使用该静态库的程序必须也使用_STATIC_CPPLIB,否则链接出错(链接纯C库没有这个问题).应该保证让_STATIC_CPPLIB作用到所有使用到c++标准库的cpp文件.
4.程序无法启动,编译新旧文件杂揉原因导致C库混乱,如应当编译出错的文件被编译过了.

5.Solid_D.lib(BP_Scene.obj) : warning LNK4204: “f:\Gamedev\Objs\DestinyMatrix\D\vc70.pdb”缺少引用模块的调试信息;正在链接对象,如同没有调试信息一样
Solid_D.lib(BP_Scene.obj) : warning LNK4204: 'f:\Gamedev\Objs\DestinyMatrix\D\vc70.pdb' is missing debugging information for referencing module; linking object as if no debug info

LNK4204是个很含糊的warning,也很讨厌.MSDN上说是f:\Gamedev\Objs\DestinyMatrix\D\vc70.pdb文件是损坏的,要求重编,谬之甚已.上文的实际意思是找不到Solid_D.lib编译对应的vc70.pdb,比如Solid工程被Clean了.Solid_D.lib里有其对应的vc70.pdb的绝对路径,所以Solid_D.lib可以被复制到任何工程目录,而调试时IDE能找到lib对应的调试信息.一旦其对齐的vc70.pdb被删除就出现LNK2404.
IDE的工程Clean也有问题,它的Clean不是严格Clean指定工程的中间文件,而是Clean掉工程的中间目录,如果设定多个项目的中间目录为一个目录,且相互依耐,编译就会出现问题,编译完全紊乱.特别是vc70.pdb只剩下最后一个被编译的工程的.

copy "$(TargetPath)" F:\Gamedev\Libs\
中间有空格的TargetPath要加上"",否则空格导致copy失败

posted on 2006-01-27 14:42 linghuye 阅读(3096) 评论(1)  编辑 收藏 引用 所属分类: 编程札记

评论

# re: Compiler warning  回复  更多评论   

网上一堆瞎扯的,这回LNK4204终于找到靠谱的答案了,感谢博主啊!
2014-07-16 10:22 | wffdss
只有注册用户登录后才能发表评论。