• 记一次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%lib64msvc i4882.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++代码兼容性的问题,新手踩坑太少,遇到啥问题都是新问题。
  • 相关阅读:
    js实现小球碰撞游戏
    jquery实现简易的计算器
    js中的substr和substring区别
    学习笔记:模拟退火
    解题报告:luogu P4879
    解题报告:CF58C
    解题报告:luogu P1160
    解题报告:CF1244D
    学习笔记:三分法(唔,好像不是唉)
    解题报告: CF1288C
  • 原文地址:https://www.cnblogs.com/LinTeX9527/p/11045815.html
Copyright © 2020-2023  润新知