您的位置:首页 > 编程语言 > C语言/C++

记一次C++编程引用obj文件作为静态库文件

2020-04-18 07:22 495 查看

【推荐阅读】微服务还能火多久?>>>

简介

常用静态库文件的名字一般是 ***.lib ,例如 nisyscfg.lib 就是一个静态库文件,但是一个例程居然是引用 **.obj 文件作为静态库,有点非常规啊。

这是一个NI488.2 的例程,其中一个例程的说明文档如下:

Microsoft Visual C++ (64-bit) With Microsoft Visual C++ (Version 8.0 or higher), this is done by typing in using the 64-bit environment: cl /I"%NIEXTCCOMPILERSUPP%\include" 4882query.c "%NIEXTCCOMPILERSUPP%\lib64\msvc\ni4882.obj" /MD

在编译命令中可以看出需要设置示例程序包含的头文件路径、库文件路径即可。这里的库文件是 ni4882.obj。按照文档说明设置工程:

unresolved external symbol

新建一个命令行工程,它原本只能输出 Hello World!!!,我打算把示例程序的入口函数改名字为 int __cdecl entry_4882query(void) 作为一个函数引入到命令行 main() 函数中,直接编译却出现了这个错误,一头雾水。

思考了一会儿,刚刚新建工程是 C++ 工程,但示例工程全部都是 C 语言写的,难道是这里出现了问题,所以我打算在示例工程源文件收尾加一些东西,如下:

#include "ni4882.h"

#ifdef __cplusplus
extern "C" {
#endif

int __cdecl entry_4882query(void)
{
//.....
}

#ifdef __cplusplus
}
#endif

然而编译之后还是出错。

最后借助于必应,才明白原来源文件和头文件都需要加上 __cplusplus 标记才行。

电脑和仪器之间通过GPIB卡连接,仪器上电执行结果如下:

仪器断电执行结果:

总结

  1. 不要陷入思维误区,一提起静态库文件就是 *.lib 有可能厂商提供的就是一个 *.obj 文件;
  2. C代码与C++代码兼容性的问题,新手踩坑太少,遇到啥问题都是新问题。

原文出处:https://www.cnblogs.com/LinTeX9527/p/11045815.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ visual studio