c - 尝试在 Raspberry Pi 上编译 Paho MQTT C 示例

标签 c makefile raspberry-pi mqtt

我正在尝试在我的树莓派上运行 C 语言的 Paho MQTT 示例:https://www.eclipse.org/paho/clients/c/

我尝试下载预构建的二进制文件并链接到lpaho-mqtt3c

我将该库放在这里:/home/pi/mqtt_C_testing/Eclipse-Paho-MQTT-C-1.3.1-Linux/lib

我添加了:LD_LIBRARY_PATH=/home/pi/mqtt_C_testing/Eclipse-Paho-MQTT-C-1.3.1-Linux/lib/

我的 makefile 如下所示:

IDIR = /home/pi/mqtt_C_testing/Eclipse-Paho-MQTT-C-1.3.1-Linux/include
LDIR = /home/pi/mqtt_C_testing/Eclipse-Paho-MQTT-C-1.3.1-Linux/lib
CC = gcc
LD = gcc
CFLAGS = -Wall
LIBS = -lpaho-mqtt3c

PROG_NAME = main

# directories in project
BIN = bin
SRC = src
OBJ = obj
INCLUDE = include

INCLUDES = -I./$(INCLUDE)

all : $(PROG_NAME)

$(PROG_NAME) : $(BIN)/$$@

$(BIN)/% : $(OBJ)/%.o
        $(CC) $(CFLAGS) $^ -o $@ $(LIBS)

$(BIN)/main : $(addprefix $(OBJ)/, \
        main.o)

$(OBJ)/main.o : $(addprefix $(INCLUDE)/, \
        MQTTProperties.h MQTTReasonCodes.h MQTTSubscribeOpts.h MQTTClient.h \
        MQTTClientPersistence.h MQTTAsync.h)

$(OBJ)/%.o : $(SRC)/%.c
        $(CC) $(INCLUDES) $(CFLAGS) -c $< -o $@

.PHONY: clean

clean:
        rm -f $(OBJ)/*.o

当我尝试构建时,gcc 找不到该库:

gcc -Wall obj/main.o -o bin/main -lpaho-mqtt3c
/usr/bin/ld: cannot find -lpaho-mqtt3c
collect2: error: ld returned 1 exit status
make: *** [makefile:26: bin/main] Error 1

我的目录结构是这样的:

pi@raspberrypi:~/mqtt_C_testing $ ls
bin  Eclipse-Paho-MQTT-C-1.3.1-Linux  include  makefile  obj  src

我在 src 中有 main.c(mqtt 示例文件),并将所有 MQTT 头文件放在 include 中。
mqtt 的库文件位于:/home/pi/mqtt_C_testing/Eclipse-Paho-MQTT-C-1.3.1-Linux/lib

我真的不确定我是否走对了路,所以非常感谢您的帮助。谢谢!

最佳答案

为了编译它,我执行了以下操作:

1) 我通过克隆 github.com/eclipse/paho.mqtt.c 上的存储库来构建库,然后运行 ​​make 然后运行 ​​make install。这会将 .so 文件放入/usr/local/lib

2)我将所有.h文件放在项目目录的主文件夹中:/home/pi/mqtt_C_testing/

3) 我将 paho mqtt 同步示例命名为 main.c 并将其也放在主目录中。

4) 然后我可以简单地使用:gcc -Wall -o test main.c -lpaho-mqtt3c 构建并创建一个名为“test”的可执行文件

5) 我也成功编写了一个仅使用 make 运行的 makefile。我对这一切都是菜鸟,但我发现这个网站( http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/ )确实对创建 makefile 有帮助。不过,我还没有真正成功地将 .h 文件放入自己的包含目录中。

CC = gcc
CFLAGS=-I.
DEPS = MQTTAsync.h MQTTClientPersistence.h MQTTProperties.h MQTTClient.h MQTTReasonCodes.h MQTTSub$
OBJ = main.o
LIBS= -lpaho-mqtt3c


%.o: %.c $(DEPS)
        $(CC) -c -o $@ $< $(CFLAGS)

mainmake: main.o
        $(CC) -o $@ $^ $(CFLAGS) $(LIBS)

关于c - 尝试在 Raspberry Pi 上编译 Paho MQTT C 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59852380/

相关文章:

c - 多线程文件搜索

c - 如何在c中为未知字符串长度分配内存

java - 用户按下键时看不到消息

c++ - 从 makefile 定义宏函数

linux - 配置:错误:找不到库的版本

ffmpeg - 未找到 SRT 协议(protocol) - Raspberry Pi 4 通过 ffmpeg

C - 指针内存分配

post - 使用cmake完成后如何打印消息?

debian-based - 如何在运行Debian Squeeze和LXDE的Raspberry Pi上截屏?

python - 优化 RPi.GPIO 中类似事件回调的代码部分(Raspberry Pi 上的 python)