标题:
[求助]
求教错误
[打印本页]
作者:
paladin0212
时间:
2011-2-24 10:46
标题:
求教错误
2>正在链接...
2>libjpeg.lib(jerror.obj) : error LNK2001: 无法解析的外部符号 __iob
2>libpng.lib(pngerror.obj) : error LNK2001: 无法解析的外部符号 __iob
2>libpng.lib(pngrutil.obj) : error LNK2019: 无法解析的外部符号 __iob,该符号在函数 _png_handle_pHYs 中被引用
2>c:\ARToolKit\examples\simpleVRML\..\..\bin\simpleVRML.exe : fatal error LNK1120: 1 个无法解析的外部命令
2>生成日志保存在“file://c:\ARToolKit\examples\simpleVRML\Release\BuildLog.htm”
2>simpleVRML - 4 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 3 个,跳过 1 个 ====
请高手帮我看看我编译simpleVRM了时编译relese版本就出这问题了如何解决
作者:
popleaf1
时间:
2012-3-26 16:49
1#
paladin0212
请看链接:
http://hi.baidu.com/yeyingxian/blog/item/0cfabcd38885cb32960a16e1.html
,我在VS2005下解决了和你类似的错误。
作者:
popleaf1
时间:
2012-3-26 16:49
具体内容为:
解决链接错误:error LNK2001: 无法解析的外部符号 __iob2008-09-05 16:28该错误主要是由于静态库在VC6编译而主程序在VC2005编译,大家用的CRT不同。解决办法,代码中增加
#ifdef __cplusplus
extern "C"
#endif
FILE _iob[3] = {__iob_func()[0], __iob_func()[1], __iob_func()[2]};
此错误的产生根源:
在VC6的stdio.h之中有如下定义
_CRTIMP extern FILE _iob[];
#define stdin (&_iob[0])
#define stdout (&_iob[1])
#define stderr (&_iob[2])
stdin、stdout、stderr是通过查_iob数组得到的。所以,VC6编译的程序、静态库只要用到了printf、scanf之类的函数,都要链接_iob数组。
而在vc2005中,stdio.h中变成了
_CRTIMP FILE * __cdecl __iob_func(void);
#define stdin (&__iob_func()[0])
#define stdout (&__iob_func()[1])
#define stderr (&__iob_func()[2])
_iob数组不再是显式的暴露出来了,需要调用__iob_func()函数获得。所以vc6的静态库链接VC2005的C运行库就会找不到_iob数组.
通过重新定义
FILE _iob[3] = {__iob_func()[0], __iob_func()[1], __iob_func()[2]};
就把vc6需要用到的_iob数组搞出来了
欢迎光临 ARToolKit中文论坛 (http://artoolkit.net/)
Powered by Discuz! 7.0.0