用记事本打开lib,很清楚的看到一个函数,调用的时候却出现如下错误:
error LNK2001: unresolved external symbol "short __cdecl eda_get_pdb_name(char *,char *,short)" (?eda_get_pdb_name@@YAFPAD0F@Z)另外我找了个正常使用的lib文件,有意在link项中去掉它,提示的错误如下:
error LNK2001: unresolved external symbol _HdaEnumGetNode@16大家看到了,他们提示的错误有细微差别,不知道高手能否从这点差别看出我的问题所在!另外在lib文件中,他们也有细微差别:
可以正常使用的lib中函数的表达形式类似于:__imp__FixGetMyname@8
而无法使用的lib中的函数的表达形式类似于:__imp__DmacsEventLogClose前者有序号,后者没有!请问高手如何解决这个问题,非常急!注:不用mfc,在控制台程序下,那个无法使用的lib可以正常使用。
error LNK2001: unresolved external symbol "short __cdecl eda_get_pdb_name(char *,char *,short)" (?eda_get_pdb_name@@YAFPAD0F@Z)另外我找了个正常使用的lib文件,有意在link项中去掉它,提示的错误如下:
error LNK2001: unresolved external symbol _HdaEnumGetNode@16大家看到了,他们提示的错误有细微差别,不知道高手能否从这点差别看出我的问题所在!另外在lib文件中,他们也有细微差别:
可以正常使用的lib中函数的表达形式类似于:__imp__FixGetMyname@8
而无法使用的lib中的函数的表达形式类似于:__imp__DmacsEventLogClose前者有序号,后者没有!请问高手如何解决这个问题,非常急!注:不用mfc,在控制台程序下,那个无法使用的lib可以正常使用。
在"搜索(S)"标签下,在"输入要查找的单词(W)"中输入:Under the Hood
然后,"选择主题(T)"中,选择"级别"为 19 的文章.
应该对你很有帮助!
我知道是命名命名的问题,我问是怎么解决这个问题!
看头文件只能得到函数的参数和返回值,这与找不到函数有什么关系啊!只要有函数名,给个错误的参数也能通过编译,只不过是运行时候出错罢了!
error LNK2001: unresolved external symbol "short __cdecl eda_get_pdb_name(char *,char *,short)" (?eda_get_pdb_name@@YAFPAD0F@Z)
是找不到函数的入口,与函数的参数有什么关系啊?参数不正确只会是运行的时候出错,与编译有什么关系啊?这是调用lib,不是调用cpp中的函数!现在是通不过连接!你们假设我的参数是正确的行不行啊!这么简单的问题也不相信我。
extern "C"
{
#include "myheader.h"
}
这是因为C语言写的lib文件没有C++所必须的名字破坏,C函数不能被重载,因此连接器会出错。
楼上说的问题我考虑过了,我一直感觉是编译的时候的问题,因为我在.c文件中使用就没有问题,而在.cpp中有问题,但一直不知道怎么解决它,我先试一试上面的程序再说。
有需要导出的函数前加上
_declspec(dllexport)关键字,
还要在VC里设置:
project->setting->link->写上你的lib文件,
另外还要把DLL的头文件加载上需要调用的工程上,把lib文件和DLL文件放在发布的目录一下(看你VC上面的如何设置不同而不同)
over!