非常规的VC 2005导入库“无法找到符号”问题

LLLLLLLLLLLLLL265161 2010-06-05 11:51:34
问题是这样的,我有两个工程,一个是依赖库DEP,一个是调用程序test。依赖库编译为DLL,有一个导入库lib;调用程序使用这个lib。现有如下类:
class __declspec(dllexport) C;
class A : public C;
class B : public C;

经过一些考虑,我先后将DEP中的两个类A和B用__declspec(dllexport)公开成为接口。

但是test处理A,无论是构造还是调用其成员函数,都是没有问题的;但是对于B,构造和成员函数,编译器都会提示“error LNK2019: 无法解析的外部符号”。

我进行了如下尝试:
1. 用depends.exe打开DEP.dll,查看里面的符号,确定有B的各个相关函数,查到其导出名称为"?*B***"
2. 用dumpbin.exe打开DEP.lib,查看导出符号,其导出函数名称形式依然是"?*B***"
3. 编译器告知“error LNK2019: 无法解析的外部符号 __declspec(dllimport) public: __thiscall B::B(void)”,我查看对应的符号,形式为"__imp_?*B***",于是我怀疑,是不是因为这两个名字不匹配
4. 于是我去掉了test对DEP.lib的引用,看看对于A会生成什么样的符号名。结果发现A的符号名也是"__imp_?*A***",而DEP.dll中,A对应的符号也是"?*A***"形式,说明对于A正常配对了
5. 我重新编译过整个DEP工程,试图让编译器重新构造obj文件,然后重新链接,结果发现依然还是上述情况

请问有没有哪位朋友知道如何解决这个问题?
...全文
169 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
soswaidao 2010-06-05
  • 打赏
  • 举报
回复
extern
  • 打赏
  • 举报
回复
果然,有一个错误的版本,谢谢了!我脑袋真是浆糊了,唉~
arong1234 2010-06-05
  • 打赏
  • 举报
回复
怀疑你修改了库的代码后,你的exe工程还链接原来的lib文件,删除你所有和这个库有关的lib文件,然后全部重新编译试试,必须用新生成的lib文件重新链接才行
  • 打赏
  • 举报
回复
extern应该是不能用到类声明上的

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧