链接到 VS6 库的未解析外部符号

Unresolved external symbol linking to a VS6 library

提问人:radiofreemyourenji 提问时间:4/15/2016 最后编辑:Communityradiofreemyourenji 更新时间:4/15/2016 访问量:183

问:

我有一个NIUSB8452 DAQ,供应商贴心地提供了ni845x.lib和ni845x.h,这样我就可以使用C而不是LabView来读取数据。但是,我在 VisualStudio 2015 中让库工作时遇到了一些问题。第一个警报点可能是他们的文档说它与 VS6 兼容,但我在这里看到其他人在 VS15 上成功地使用了 VS6 的库,所以,我希望我也能这么漂亮。

我现在遇到的问题是,在构建中,我收到链接器错误,如下所示

unresolved external symbol @ni845xStatusToString@12 referenced in function (function name follows)

在谷歌上搜索时,我发现了这个问题,其中提到了 dumpbin /exports。为了检查我是否没有遇到海报描述的 32/64 位错误(因为我不太确定如何诊断这个问题,这似乎是一个很好的起点),我在外部库上运行了 dumpbin /exports。我得到了一堆公共符号,包括

FF06 __imp__ni845xStatusToString@12
FF06 _ni845xStatusToString@12

我绝对没有看到@ni845xStatusToString@12,这就是 VisualStudio 抱怨未解决的问题。

@ni845xStatusToString@12 和 _ni845xStatusToString12 有什么区别?后者的存在和前者的不存在表明我在这个导入中做错了什么?

笔记

  • 本问题所述,lib 和 header 已包含在文件中,除了我为 #4 提供了 lib 的完整路径,我认为这意味着您只需要文件名。
  • 我在我的 cpp 文件中使用 extern “C” { #include ni845x.h },尽管 ni845x.h 确实有 #ifdef __cplusplus 样板。
C++ visual-studio-2015 未解析外部

评论

0赞 PeterT 4/15/2016
没看到你已经尝试过垃圾箱的东西。无论如何,如果它是一个仅限 C 的库并且不做这件事,你可以尝试通过#ifdef __cplusplusextern "C"{ #include <ni845x.h> }
0赞 radiofreemyourenji 4/15/2016
啊,我应该提到这一点。我确实把它包裹起来了,虽然标题也有我是多余的,但我认为这不会有害。extern "C" #ifdef __cplusplus
0赞 PeterT 4/15/2016
好吧,那么我想你应该确保标题中的函数在它们前面__declspec(dllimport)

答: 暂无答案