zoukankan      html  css  js  c++  java
  • 记一次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++代码兼容性的问题,新手踩坑太少,遇到啥问题都是新问题。
  • 相关阅读:
    POJ4046 Sightseeing
    SGU 298. King Berl VI
    POJ1741 Tree
    POJ1639 Picnic Planning
    POJ1635 Subway tree systems
    [JSOI2008]最小生成树计数
    ftrace使用简介(三)
    make: *** 没有规则可以创建目标"menuconfig". 停止
    编译linux内核(ftrace)
    vim 缩进配置
  • 原文地址:https://www.cnblogs.com/LinTeX9527/p/11045815.html
Copyright © 2011-2022 走看看