我维护了一个旧项目,遇到了一些链接器错误。
错误消息为:
error LNK2019: unresolved external symbol __imp__bsearch referenced in function "bool __cdecl is_sync_host
据我所知,bsearch函数包含在头文件"cstdlib“或"stdlib.h”中,但即使包含头文件,也找不到"bsearch“。
我怀疑这是因为这个老项目因为符号冲突而忽略了一些库(我也不知道为什么他们更喜欢省略库而不是重命名函数)。
被忽略的库:msvcrt.lib;msvcrtd.lib;libcmt.lib;libc.lib
我试着重新添加那些被忽略的库,但是我遇到了很多“符号重新定义”的问题,我不认为重命名这些函数是一个合适的解决方案。
我找到了一个解决方法(将bsearch替换为std::binary_search),但是我想知道为什么以及如何正确地解决这个问题(为什么编译器找不到bsearch?)。谢谢。
发布于 2014-05-27 17:38:42
error LNK2019:这是一个链接器错误。你的代码编译得很好(.c > .o),是链接给你带来了问题(.o > .exe)。
忽略的库:"msvcrt.lib;msvcrtd.lib;libcmt.lib;libc.lib“
这意味着代码忽略了C标准库,所以难怪它找不到标准的bsearch()函数……
问题是,为什么?写得很好的代码根本没有理由(我能想到的)显式地忽略标准库。
我试着重新添加那些被忽略的库,但是我遇到了很多“符号重新定义”的问题……
这让我得出结论,你的代码是而不是“写得很好”,在这一点上,如果不看代码就很难给出建议,或者告诉你“丢掉它,它是垃圾”。;-)
我不认为重命名这些函数是一个合适的解决方案。
如果您的项目中有像标准库函数一样命名为的函数,除非您的项目是标准库,否则它们的名称是错误的,应该重命名。
但在这一点上,我真的很想看看有问题的代码,弄清楚最初的程序员可能是怎么想的……
https://stackoverflow.com/questions/23885844
复制相似问题