【发布时间】:2014-06-23 14:11:43
【问题描述】:
我的任务是重构一个非常古老的项目,而在最近几天我正在检查可执行文件的依赖关系,因为由于某些原因,它们自 2009 年以来发生了变化,从 4 变为 14。更具体地说,我的工作是保持 2009 年之前的依赖关系,但代码的更改一直持续到今天。
我找到了导致问题的指令。这是项目使用的库中的一个函数:
chain(str, pps)
char *pps;
char *str;
{
int pp = 0;
pp = atoi(pps);
// ic sunt leones.
如果我用 0、1 或 3 之类的整数赋值来注释或替换 atoi,则库编译正常,但使用此 .lib 的可执行文件会给我以下错误:
nafxcw.lib(wincore.obj) : 错误 LNK2001: 无法解析的外部符号 __imp__InitCommonControls@0 nafxcw.lib(wincore.obj) : 错误 LNK2001: 无法解析的外部符号 __imp__DragAcceptFiles@8 nafxcw.lib(appcore.obj) : 错误 LNK2001: 无法解析的外部符号 _ClosePrinter@4 nafxcw.lib(appcore.obj):错误 LNK2001:无法解析的外部符号 _DocumentPropertiesA@24 nafxcw.lib(appcore.obj) : 错误 LNK2001: 无法解析的外部符号 _OpenPrinterA@12 nafxcw.lib(filecore.obj) : 错误 LNK2001: 无法解析的外部符号 __imp__SHGetFileInfoA@20 nafxcw.lib(filecore.obj) : error LNK2001: unresolved external symbol _GetFileTitleA@12
否则,如果我使用不同的值进行赋值,例如 2、4 或每隔一个整数,则一切都可以正确编译并正常工作。
有什么建议吗?这里发生了什么事?为什么会有这种奇怪的行为?
编辑:显然问题不在于 atoi。如果我使用自制函数来执行任何操作并接受 char* 并返回 int 或直接用 int 替换函数链的第二个参数并直接分配它,我仍然会收到相同的错误。
【问题讨论】:
-
“我的工作是保持 2009 年之前的依赖关系,但代码的更改一直持续到今天”——听起来你需要找一份新工作。软件更改 - 试图在这种时间范围内保持静态可能是一场失败的战斗,或者是各种安全/性能/功能灾难的秘诀......
-
建议:与 /VERVOSE 链接,包括错误和解决方法,并区分跟踪。很有可能会出现有用的东西。
标签: c++ c visual-c++