error: LNK2019与error: LNK1120解决方案,亲测有效

这篇博客记录了两个LNK2019错误的解决方法。一是由于在.h文件中声明的ReadStep函数在编译时找不到实现,经过查找发现该实现曾被删除,重新加入实现后问题解决。二是当一个项目作为动态库被另一项目引用时,若类函数未正确导出,需使用__declspec(dllexport)宏将其声明为导出接口,以便正确链接。
摘要由CSDN通过智能技术生成

出现如下问题

在这里插入图片描述

(1)仔细看蓝色圈所示:说是 ReadStep这个函数,vs能读取他所在的 .h 文件,编译的时候却找不到他的实现文件,导致出现LNK2019问题。

原因: 在一个.h 文件中使用extern声明了 ReadStep这个函数(注意:如果你没加extern,那可能是在对应的.cpp文件中,在实现该函数时你未加类的作用域也会报该错误), 如果多个.cpp都引用了这个.h文件,编译器会在这些.cpp去寻找它的实现,如果在某个CPP中这个实现被删除了,或者注释了,或者这个cpp被删除了,那么编译器会找不到报该错,实质上大部分的LNK2019问题都是能找到声明或定义,却找不到实现。

extern std::vector<Topo_Shape*> ReadStep(std::string fileName);

我在被我删除的.cpp文件里找到了该实现,从新把他写在了另一个cpp里,错误解决

std::vector<Topo_Shape*> ReadStep(std::string fileName)
{
	std::ifstream  afile;
	afile.open(fileName.c_str(), std::ios::out | std::ios::in);
	std::ostringstream os;
	os << afile.rdbuf();
	std::string str = os.str();
	auto shapes = Swj_ReadSTEP(str);
	return shapes;
}

上图第二个错误也是蓝色宽宽里的函数未更新所致。在此记录一下错误。

!!!!!!!!!!!!

(2)顺便记录一下LNK2019无法解析外部符号的另一种可能,在一个工程里,你将某个项目运用Cmakelist编写成了动态库,另一个项目链接该动态库链接不上也会出现上述错误,

在这里插入图片描述

比如这里Joint_GeometryBase2d类里面的某个函数提示说连接不上,那可能是你这个类未加这个导出的宏,在Joint_GeometryBase2d前加上*__declspec(dllexport),这里我是用马赛克处的的这个宏代替了__declspec(dllexport)*,把这个类声明为导出接口,编译成动态库之后,再调用该类里函数就可以了,就可以连接上该库。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值