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",所以应当如何处理?
Mosquitto的C库在Linux中如何使用struct mosquitto中的user data
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 智能之人 2018-06-02 14:47关注
步骤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 汇编语言除法溢出问题