调用libpci库出现的问题和解决方法

 

本方案以pciutils-3.5.1为例.

 

1. 从以下地址下载pciutils-3.5.1.tar.xz

https://www.kernel.org/pub/software/utils/pciutils/

2. 然后

[root@localhost terry]# xz –d pciutils-3.5.1.tar.xz

[root@localhost terry]tar xvf pciutils-3.5.1.tar

[root@localhost terry]# cd pciutils-3.5.1

[root@localhost pciutils-3.5.1]# make

就会发现在

[root@localhost pciutils-3.5.1]# ls lib/libpci.a

lib/libpci.a

**注意***

如果你需要动态的连接库,你只需要将Makefile改为

SHARED=yes

3. 写好自己的代码, 比如我写的如下:

#include
"pci.h"

 

bool PCIeVdp::getPCIConfig(PCI_CONFIG *pci_cfg, PCI_LOCATION *loc, int &pciCount)

{

    struct pci_access *pacc;

    struct pci_dev *dev;

    unsigned
char data[256];

 

    pciCount = 0;

    memset(data, 0, sizeof(data));

    pacc = pci_alloc();        /* Get the pci_access structure */

    /* Set all options you want -- here we stick with the defaults */

    pci_init(pacc);        /* Initialize the PCI library */

    pci_scan_bus(pacc);        /* We want to get the list of devices */

    for (dev=pacc->devices; dev; dev=dev->next)    /* Iterate over all devices */

    {

        pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES | PCI_FILL_CLASS);    /* Fill in header info we need */

        for(int i=0;i<256;i++)

        {

            data[i] = pci_read_byte(dev, i);

        }

        memcpy((unsigned
char *)&pci_cfg[pciCount], data, 256);

        loc[pciCount].bus_num = dev->bus;

        loc[pciCount].dev_num = dev->dev;

        loc[pciCount].func_num = dev->func;

        pciCount++;

    }

    pci_cleanup(pacc);        /* Close everything */

    return
true;

}

 

需要将pciutils-3.5.1/lib下的pci.h, header.h, types.h以及libpci.a 拷贝到你的程序文件相同的目录.

4.运行make去编译,发现出现以下问题.

折腾了下,发现是因为libpci.a这个库是用C语言写的,而我的程序是用C++写的, 于是在pci.h的头和尾加上

#ifdef __cplusplus

extern
"C" {

#endif

 

#ifdef __cplusplus

}

#endif

 

问题解决.

5. 可是新的问题有出现了

查了下发现是我的makefile中没有加载libz,于是修改makefile如下

LIB+=-ldl -lz -lpthread ./libpci.a

发现问题解决,编译顺利通过.

 

 

 

 

 

 

 

 

 

 

调用libpci库出现的问题和解决方法的更多相关文章

  1. golang github.com/go-sql-driver/mysql 遇到的数据库,设置库设计不合理的解决方法

    golang github.com/go-sql-driver/mysql 遇到的数据库,设置库设计不合理的解决方法,查询中报了以下这个错 Scan error on column index 2: ...

  2. (转)调用System.gc没有立即执行的解决方法

    调用System.gc没有立即执行的解决方法 查看源码 当我们调用System.gc()的时候,其实并不会马上进行垃圾回收,甚至不一定会执行垃圾回收,查看系统源码可以看到 /** * Indicate ...

  3. windows 10 删除库后自动恢复的解决方法

    目录 什么是windows 库? 手动删除不行吗? 如何正确的"删除"? title: windows 10 删除库后自动恢复的解决方法 date: 2019-06-09 15:4 ...

  4. gd库不支持jpeg的解决方法

    杜工就不在这里啰嗦怎么遇到这个问题的了,如果你确实安装了的gd库,却发现无法支持jpeg格式的图片,可从下面找到答案. 原因是在编译gd库前,配置时未声明jpeg库路径.解决方法如下: 32位系统: ...

  5. python 学习jieba库遇到的问题及解决方法

    昨天在课堂上学习了jieba库,跟着老师写了同样的代码时却遇到了问题: jieba分词报错AttributeError: module 'jieba' has no attribute 'cut' 文 ...

  6. 有关PyCharm安装库失败的问题的解决方法

    最近因为要使用Python的缘故,安装了python IDE+pycharm,如此安装的原因是因为Pycharn 并不像anaconda一样拥有相对完整的依赖库和开发包,可以直接运行python,但因 ...

  7. 在Python中调用glutInit遇到OpenGL.error.NullFunctionError的解决方法

    在window10 64bit + Python环境下,通过pip install PyOpenGL成功之后,无奈执行到glutInit()时候总是报错. OpenGL.error.NullFunct ...

  8. localforage调用setItem时出现DOMException错误的解决方法

    今天使用localforage时出现下面的错误: Uncaught (in promise) DOMException transaction.onabort.transaction.onerror ...

  9. 织梦DedeCMS调用二级子栏目或者多级栏目解决方法

    本文是关于织梦DedeCMS调用多级子栏目的,拿来测试分享下.DEDECMS v5.7,后台已建栏目目录,如下图1所示: 图1 DEDECMS后台栏目结构 现在,我们先来调用顶级栏目"站长新 ...

随机推荐

  1. 有关velocity的资料(等待整理)

    proxy-target-class="true" 与proxy-target-class="false"的区别: proxy-target-class属性值决 ...

  2. 阅读笔记:A Few useful things to Know About machine Learning

    这是Machine Learning领域的经典论文,文中提到了ML相关的12个keys,并自称这些keys是“black art”,我觉得有点像ML的“最佳实践”. 网上有此文的中文翻译,写得很详细, ...

  3. SpringBoot系列教程起步

    本篇学习目标 Spring Boot是什么? 构建Spring Boot应用程序 三分钟开发SpringBoot应用程序 本章源码下载 Spring Boot是什么? spring Boot是由Piv ...

  4. 一步步从Spring Framework装配掌握SpringBoot自动装配

    目录 Spring Framework模式注解 Spring Framework@Enable模块装配 Spring Framework条件装配 SpringBoot 自动装配 本章总结 Spring ...

  5. python2在安装pywin32后出现ImportError: DLL load failed 解决方法

    python2在安装pywin32后出现ImportError: DLL load failed 解决方法 在python2中有时候会出现: import win32api   ImportError ...

  6. Redis集群(一)

    redis是单线程,但是一般的作为缓存使用的话,redis足够了,因为它的读写速度太快了. 官方的一个简单测试: 测试完成了50个并发执行100000个请求. 设置和获取的值是一个256字节字符串. ...

  7. 170531、FormData 对象的使用

    通过FormData对象可以组装一组用 XMLHttpRequest发送请求的键/值对.它可以更灵活方便的发送表单数据,因为可以独立于表单使用.如果你把表单的编码类型设置为multipart/form ...

  8. I/O排查命令

    I/O可以说是问题大户,线上的问题经常都是它引起的,很多人却不知道怎么定位这种问题.今天简单介绍一下,在此抛砖引玉. 此类问题我们一般分三步定位:按系统级I/O.进程级I/O.业务级I/O定位即可,一 ...

  9. ping 10.13.5.233

    3. 环境 URL选择器 tableView ping 10.13.5.233

  10. MongoDB Windows环境安装及配置( 一)

    原文http://www.cnblogs.com/lzrabbit/p/3682510.html MongoDB一般安装 1.首先到官网 (http://www.mongodb.org/downloa ...