调用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. virgo-tomcat访问日志的详细配置

    Tomcat 日志信息分为两类:1.运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息.2.访问日志信息,它记录的访问的时间.IP.访问的资料等相关信息. 关于tomcat访问日志的产 ...

  2. 【BZOJ3772】精神污染 DFS序+主席树

    [BZOJ3772]精神污染 Description 兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是 ...

  3. PMP 笔记

    项目: 为创造独特的产品.服务或结果而进行的临时性工作. 项目特征: 独特性:Unique.临时性:Temporary.渐进明细. 渐进明细:预算越来越精细.比如三峡工程中,预算从10亿级的误差到1亿 ...

  4. nginx安装和测试 (已验证)

    进入:/usr/local/nginx 目录注意:为了保证各插件之间的版本兼容和稳定,建议先通过以下版本进行测试验证. 一.下载版本 下载nginx: wget http://nginx.org/do ...

  5. postgresql模式创建、修改、删除

    一个数据库包含一个或多个模式,而模式又包含表.序列.函数等,不同的模式可以包含相同名称的表.序列.函数等.模式本质上是命名空间,就像人的姓氏一样.一个用户只要有权限,连接到数据库后,可一次访问该数据库 ...

  6. [NGINX] - 配置文件优化 - NGINX.CONF

    Nginx 本文主要针对公司的Nginx负载均衡配置进行解释,配置文件在最下方.因为公司没有使用PHP,所以NGINX里面并没有太多facgi模块相关优化    NGINX.CONF user   语 ...

  7. Linux下手工卸载11.2 RAC(非MOS的deinstall方法)

    思路来自于经典的<How to Proceed From a Failed 10g or 11.1 Oracle Clusterware (CRS) Installation (Doc ID 2 ...

  8. IoC COntainer Create Javabeans 可以通过读取beans.xml 文件来创建一个应用程序上下文对象 依赖反转

    Spring初学快速入门 - Spring教程™ https://www.yiibai.com/spring/spring-tutorial-for-beginners.html# pom <? ...

  9. 构造HTTP请求Header实现“伪造来源IP”(转)

    原文:http://zhangxugg-163-com.iteye.com/blog/1663687 构造 HTTP请求 Header 实现“伪造来源 IP ” 在阅读本文前,大家要有一个概念,在实现 ...

  10. 表单(中)-EasyUI Combogrid 组合网格、EasyUI Numberbox 数字框、EasyUI Datebox 日期框、EasyUI Datetimebox 日期时间框、EasyUI Calendar 日历

    EasyUI Combogrid 组合网格 扩展自 $.fn.combo.defaults 和 $.fn.datagrid.defaults.通过 $.fn.combogrid.defaults 重写 ...