LNK2001错误, 高手能看看?

isis 2010-02-23 11:16:29
使用动态联结库出现了LNK2001错误
联结库的头文件以及lib均设置

但是发现调用一个函数PROTOCOL_INIT时候出现LNK2001,
头文件中这个函数定义是
#if defined (CPROT)
void PROTOCOL_INIT();
#endif


而我程序中的确定义了CPROT
但是仍然出现LNK2001
但是如果我调用#if #endif外的函数,比如函数FACILITY_RESP
头文件中这个函数FACILITY_RESP定义是
#if defined (CPROT)
...
#endif
void FACILITY_RESP();
却没有问题

还有一个问题通过depends来看这个DLL库,却发现不了PROTOCOL_INIT或FACILITY_RESP,但是FACILITY_RESP的确可以调用

高手能看看?


...全文
97 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
WizardK 2010-02-24
  • 打赏
  • 举报
回复
声明CPROT的位置
BombZhang 2010-02-24
  • 打赏
  • 举报
回复
编译DLL的时候CPROT没定义
w_anthony 2010-02-24
  • 打赏
  • 举报
回复
LNK2001是未解决的符号,也就是说函数只有声明没有实现。
PROTOCOL_INIT和FACILITY_RESP都没有__declspec(dllimport),这两个函数应该都不是从dll导入的,dll没导出这两个函数也不奇怪。
不过它们可能会是从lib导入(这个lib可能经过一些特定处理),lib文件结构既可以包含动态库的链接信息也可以包含一些函数体(类似于静态库),但是这个lib可能只有FACILITY_RESP的函数定义,却没有PROTOCOL_INIT的定义。
这是死结,也就是dll和lib本身就没有把PROTOCOL_INIT包含进来,即便是你定义了CPROT也没有用。如果你有dll的源码,可以在源码里面定义一下CPROT,重新编译,这样才能把PROTOCOL_INIT包含进来。虽然你可以自己定义一个PROTOCOL_INIT函数体,来使得链接通过,不过意义不大,除非你知道PROTOCOL_INIT的代码。
zhou1xp 2010-02-24
  • 打赏
  • 举报
回复
直接在工程中声明CPROT,如果还不行,那有可能是在生成DELL的时候没有定义CPROT或者在DEF文件中没有导出这个函数

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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