我正在尝试编译一个使用libmodbus库的C程序。这个库已经安装在系统上,引用属于modbus.h,它在main上以这种方式硬编码:
#include </usr/include/modbus/modbus.h>单独的编译不会产生错误:
$ gcc -Wall -c mbpoll.c
mbpoll.c:186:19: aviso: se define ‘sTcpPortStr’ pero no se usa [-Wunused-const-variable=]
186 | static const char sTcpPortStr[] = "tcp port";
| ^~~~~~~~~~~
$ gcc -Wall -c custom-rts.c
$ gcc -Wall -c serial.c但是最终的构建是这样的:
$ gcc -Wall -o myprog mbpoll.o custom-rts.o serial.o
/usr/bin/ld: mbpoll.o: en la función `main':
mbpoll.c:(.text+0xde5): referencia a `modbus_new_rtu' sin definir
/usr/bin/ld: mbpoll.c:(.text+0xe4c): referencia a `modbus_new_tcp_pi' sin definir
/usr/bin/ld: mbpoll.c:(.text+0xe91): referencia a `modbus_set_debug' sin definir
/usr/bin/ld: mbpoll.c:(.text+0xeda): referencia a `modbus_rtu_set_serial_mode' sin definir
/usr/bin/ld: mbpoll.c:(.text+0xef1): referencia a `modbus_rtu_set_rts' sin definir
/usr/bin/ld: mbpoll.c:(.text+0xf00): referencia a `modbus_connect' sin definir
/usr/bin/ld: mbpoll.c:(.text+0xf14): referencia a `modbus_free' sin definir
/usr/bin/ld: mbpoll.c:(.text+0xf22): referencia a `modbus_strerror' sin definir
/usr/bin/ld: mbpoll.c:(.text+0xfb8): referencia a `modbus_set_response_timeout' sin definir
/usr/bin/ld: mbpoll.c:(.text+0x109d): referencia a `modbus_set_slave' sin definir
/usr/bin/ld: mbpoll.c:(.text+0x10e7): referencia a `modbus_write_bit' sin definir
/usr/bin/ld: mbpoll.c:(.text+0x1108): referencia a `modbus_write_bits' sin definir
/usr/bin/ld: mbpoll.c:(.text+0x1142): referencia a `modbus_write_register' sin definir
/usr/bin/ld: mbpoll.c:(.text+0x1164): referencia a `modbus_write_registers' sin definir
/usr/bin/ld: mbpoll.c:(.text+0x11ba): referencia a `modbus_strerror' sin definir
/usr/bin/ld: mbpoll.c:(.text+0x1222): referencia a `modbus_set_slave' sin definir
/usr/bin/ld: mbpoll.c:(.text+0x12f7): referencia a `modbus_read_input_bits' sin definir
/usr/bin/ld: mbpoll.c:(.text+0x1318): referencia a `modbus_read_bits' sin definir
/usr/bin/ld: mbpoll.c:(.text+0x1339): referencia a `modbus_read_input_registers' sin definir
/usr/bin/ld: mbpoll.c:(.text+0x135a): referencia a `modbus_read_registers' sin definir
/usr/bin/ld: mbpoll.c:(.text+0x13c1): referencia a `modbus_strerror' sin definir
/usr/bin/ld: mbpoll.o: en la función `vReportSlaveID':
mbpoll.c:(.text+0x1708): referencia a `modbus_set_slave' sin definir
/usr/bin/ld: mbpoll.c:(.text+0x178b): referencia a `modbus_report_slave_id' sin definir
/usr/bin/ld: mbpoll.c:(.text+0x17a8): referencia a `modbus_strerror' sin definir
/usr/bin/ld: mbpoll.o: en la función `vSigIntHandler':
mbpoll.c:(.text+0x1e1d): referencia a `modbus_close' sin definir
/usr/bin/ld: mbpoll.c:(.text+0x1e2c): referencia a `modbus_free' sin definir
collect2: error: ld devolvió el estado de salida 1这些参考资料在libmodbus库中。
问题出在哪里?
发布于 2021-03-24 00:06:14
当链接到外部库时,需要使用-l选项传入库的名称:
gcc -Wall -o myprog mbpoll.o custom-rts.o serial.o -lmodbushttps://stackoverflow.com/questions/66766780
复制相似问题