提问人:radiofreemyourenji 提问时间:4/15/2016 最后编辑:Communityradiofreemyourenji 更新时间:4/15/2016 访问量:183
链接到 VS6 库的未解析外部符号
Unresolved external symbol linking to a VS6 library
问:
我有一个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 样板。
答: 暂无答案
评论
#ifdef __cplusplus
extern "C"{ #include <ni845x.h> }
extern "C"
#ifdef __cplusplus
__declspec(dllimport)