首页 > 解决方案 > 将一个库(基于 C++)与另一个库(基于 CUDA)链接时无法解决 LNK2019 和 LNK2021 错误

问题描述

我正在尝试将一个库从 Linux 移植到 Windows,该库由两个库组成,一个是完全基于 CUDA 的库,它是单独构建的,另一个是基于 C++ 的,并且链接到基于 CUDA 的库。

该库使用了 MSVC 不允许的动态数组,因此我将它们转换为向量并在 Linux 上成功测试它们,但在 Windows 上,我遇到了一堆 Windows 链接器问题,例如LNK2019and LNK2001,主要是当 C++ 库中的函数引用基于 CUDA 的库中的那些,例如:

错误 LNK2019:在函数“public: virtual int __cdecl dnn::ActivationMishRT:: enqueue(int,void const * const *,void * *,void *,struct CUstream_st *)" (?enqueue@ActivationMishRT@dnn@tk@@UEAAHHPEBQEBXPEAPEAXPEAXPEAUCUstream_st@@@Z)

即使我没有链接到基于 CUDA 的库,这个错误似乎也没有改变,似乎由于某种原因,即使我链接到库也无法解析符号。

有人可以解释这里发生了什么以及我应该如何修复链接错误吗?

标签: c++windowsvisual-c++cudalinker-errors

解决方案


这意味着您尝试使用的这个函数 activationMishForward(float *,float *,int,struct CUstream_st *)在库中没有找到,即使它的一种参数类型与库中的参数类型不匹配,结果也是一样的。
确保您使用的函数与库中定义的完全一致。


推荐阅读