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)
这里笔者就是使用第二种情况的办法,成功完成编译解决 无用评论 打赏 举报
悬赏问题
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!
- ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
- ¥15 求daily translation(DT)偏差订正方法的代码
- ¥15 js调用html页面需要隐藏某个按钮