sunflower860 2018-06-02 03:20 采纳率: 0%
浏览 1975
已结题

Mosquitto的C库在Linux中如何使用struct mosquitto中的user data

Mosquitto的库按照标准的make install来进行安装,并且使用正常。当我想使用struct mosquitto中的void * userdata,但编译显示错误:error: dereferencing pointer to incomplete type。
详见图片
我觉得可能是头文件没有#include ,但按理说是不应该调用含有internal的H文件。而"mosquitto.h"只有struct mosquitto的声明。
用标准make install安装的库,好像只能调用#include "mosquitto.h",所以应当如何处理?

  • 写回答

2条回答 默认 最新

  • 智能之人 2018-06-02 14:47
    关注

    步骤1:http://mosquitto.org/files/source/官网下载源码,放到Linux环境中。解压后,找到主要配置文件config.mk,其中包含mosquitto的安装选项,需要注意的是,默认情况下mosquitto的安装需要OpenSSL(一个强大的安全套接字层密码库)的支持,若不需要SSL,则需要关闭config.mk里面与SSL功能有关的选项(WITH_TLS、WITH_TLS_PSK)。笔者这里直接将这两句话屏蔽掉了。

    步骤2 :配置完毕后,输入“make install”进行安装(需要root权限),这里编译失败出现了一个问题:
    error while loading shared libraries:libmosquitto.so.1 : cannot open shared object file: No such file or directory
    所以问题很清楚,没有找到这个动态链接库。遇到这种问题就有两种情况:
    1).确实没有这个库或者库的版本不对 。 2)这个库所在的路径不在系统查找范围内。
    笔者感觉这个库名字很眼熟,果然在“make install”命令执行的打印信息中发现蛛丝马迹:
    “install -s --strip-program=strip libmosquitto.so.1 /usr/local/lib/libmosquitto.so.1”
    笔者在这个路径下,找到了该动态库,说明现在的问题应该是属于第二种情况(而且是官方的代码,也不应该会犯第一种问题),于是在网上找到了解决方案。
    1) 如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令
    ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.
    2) 如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中, 如下:(需要root权限执行下面命令)

    cat /etc/ld.so.conf

    include ld.so.conf.d/*.conf

    echo "/usr/local/lib" >> /etc/ld.so.conf

    ldconfig

    (详情参阅http://blog.iyunv.com/uid-26212859-id-3256667.html)
    这里笔者就是使用第二种情况的办法,成功完成编译

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题