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",所以应当如何处理?

步骤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)
这里笔者就是使用第二种情况的办法,成功完成编译

确实没办法直接用struct mosquitto结构数据。楼主什么业务场景需要用这个结构数据,默认用提供的回调应该够用了。