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 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退
  • ¥20 win系统的PYQT程序生成的数据如何放入云服务器阿里云window版?
  • ¥50 invest生境质量模块