记一次C++编程引用obj文件作为静态库文件
简介
常用静态库文件的名字一般是 ***.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卡连接,仪器上电执行结果如下:

仪器断电执行结果:

总结
- 不要陷入思维误区,一提起静态库文件就是
*.lib有可能厂商提供的就是一个*.obj文件; - C代码与C++代码兼容性的问题,新手踩坑太少,遇到啥问题都是新问题。
记一次C++编程引用obj文件作为静态库文件的更多相关文章
- .h头文件 .lib库文件 .dll动态库文件之间的关系
.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...
- Makefile学习(二)----生成静态库文件
Lunix下编译静态库文件: .o后缀文件:编译生成的中间代码文件: .a后缀文件:静态库文件,编译的时候会合到可执行程序中,文件比较大: .so后缀文件:动态库文件,只是一个指向,不会合到可执行程序 ...
- .h头文件、 .lib库文件、 .dll动态链接库文件之间的关系
转自.h头文件. .lib库文件. .dll动态链接库文件之间的关系 h头文件作用:声明函数接口 dll动态链接库作用:含有函数的可执行代码 lib库有两种: (1)静态链接库(Static Liba ...
- iOS 创建静态库文件时去掉当中的Symbols
在project中创建静态库文件时.默认会将一些Symbols加到静态库文件里.这样做有两个缺点: 1.假设引用静态库文件的project中发生了bug.就会直接跳转到静态库的源代码. 也许有人问:静 ...
- cocopod 中添加第三方框架,包含静态库文件,使用svn添加上传
step one: 进入静态库文件的目录 cd 路径: step two:使用命令添加 svn add 静态库名字; 然后更新一下代码就OK
- mac下svn问题——“.a”(静态库)文件无法上传解决
mac下svn问题——“.a”(静态库)文件无法上传解决 “.a”(静态库)文件无法上传(svn工具:Versions) 网上查询了一下,说是Xcode自带的svn和Versi ...
- svn管理代码在cornerstone上无法添加.a 静态库文件
有时候.a静态库不能上传到svn的服务器 导致别人拉代码运行不了 这是因为cornerstone设置里面默认不会提交.a文件, 在上图选项栏里是cornerstone默认忽略上传的文件名后缀,在这里 ...
- 制作静态库文件(.a文件)
制作静态库文件(.a文件) 1.创建静态库工程: 在Xcode中new一个新的project,选择IOS下面的Framework&Library,下面有一个Cocoa Touch Static ...
- vs 编译库文件 Qt编译库文件
QT 库能不能用 需要关注是minGW 还是MSVC编译的 Qt MinGW与MSVC对比 转:https://blog.csdn.net/u013185164/article/details/48 ...
随机推荐
- 《Windows核心编程系列》十四谈谈默认堆和自定义堆
堆 前面我们说过堆非常适合分配大量的小型数据.使用堆可以让程序员专心解决手头的问题,而不必理会分配粒度和页面边界之类的事情.因此堆是管理链表和数的最佳方式.但是堆进行内存分配和释放时的速度比其他方式都 ...
- VK Cup 2018 - Round 1 A. Primal Sport
A. Primal Sport time limit per test 1.5 seconds memory limit per test 256 megabytes input standard i ...
- codevs 3044 矩形面积求并 || hdu 1542
这个线段树的作用其实是维护一组(1维 平面(?) 上的)线段覆盖的区域的总长度,支持加入/删除一条线段. 线段树只能维护整数下标,因此要离散化. 也可以理解为将每一条处理的线段分解为一些小线段,要求每 ...
- robot framework 入门
obot framework 入门 2012-12-23 12:47:16 分类: LINUX 其实我不喜欢动不动就框架,动不动就架构,整出一坨专业术语搞的玄而又玄,让人云山雾绕,我想做的事情 ...
- 【转】JAVA的静态变量、静态方法、静态类
转自:http://blog.csdn.net/zhandoushi1982/article/details/8453522/ 静态变量和静态方法都属于静态对象,它与非静态对象的差别需要做个说明. ( ...
- Oracle中的日期数据类型
TimeStamp日期类型 TimeStamp数据类型用于存储日期的年.月.日,以及时间的小时.分和秒,其中秒值精确到小数点后6位,该数据类型 同时包含时区信息.systimestamp函数的功能是返 ...
- 关于min-height:100%的解决办法
前几天碰到一个问题,在用bs和jq2.2.0开发时,min-height设为100%在firefox和ie下没有起作用,先用css改了一下,但是min-height虽然是奏效了,但同时出现了其他css ...
- pickle序列化与反序列化 + eval说明
import pickle # #1.从文件中读取pickle格式with open('egon.json','rb') as f: pkl=f.read()#2.将json_str转成内存中的数据类 ...
- 微信小程序组件解读和分析:十四、slider滑动选择器
slider滑动选择器组件说明: 滑动选择器. slider滑动选择器示例代码运行效果如下: 下面是WXML代码: [XML] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 ...
- R in action读书笔记(7)-第七章:基本统计分析(下)
7.3相关 相关系数可以用来描述定量变量之间的关系.相关系数的符号(±)表明关系的方向(正相关或负相关),其值的大小表示关系的强弱程度(完全不相关时为0,完全相关时为1).除了基础安装以外,我们还将使 ...