我尝试将我的一个程序与[医]二线菌开源库连接起来。在自动机出了点问题之后,我终于成功地编译了它。
但是现在我从gcc那里得到了一个未定义的引用错误,当我使用库在我自己的程序中提供的一个函数时:
main.cpp:(.text+0x21): undefined reference to `modbus_udp_init(char*, int, __modbus_udp_handle*)'
collect2: Fehler: ld gab 1 als Ende-Status zurück
从我的观点来看,gcc编写我的项目的论点是正确的:
g++ -v -I ../libmodbus/modbus -o main main.cpp -L../libmodbus/modbus/.libs/ -lmodbus
我向nm
检查了函数是否真的在那个库中,但是对我来说一切看起来都很好(为了防止输出变得太大,我从输出中删除了一些部分):
$ nm ../libmodbus/modbus/.libs/libmodbus.a
modbus.o:
0000000000000590 T crc16
U free
U malloc
U memcpy
0000000000000b40 T modbus_diagnostics
0000000000000d90 T modbus_error_get_exception_code
0000000000000100 C modbus_error_str
0000000000000cf0 T modbus_exception
[...]
modbus-udp.o:
U bcopy
U close
U __errno_location
U gethostbyname
U modbus_error_str
U modbus_tcp_frame_pack
U modbus_tcp_frame_parse
0000000000000000 T modbus_udp_close
0000000000000030 T modbus_udp_init
0000000000000220 T modbus_udp_recv
0000000000000190 T modbus_udp_send
0000000000000010 r __PRETTY_FUNCTION__.4582
0000000000000000 r __PRETTY_FUNCTION__.4592
U recvfrom
U sendto
U setsockopt
U snprintf
U socket
U strerror
modbus-tcp.o:
[...]
modbus-serial.o:
[...]
有人知道为什么gcc不能解析这个符号吗?
发布于 2014-04-05 14:38:06
正如noloader所建议的,我忽略了添加extern "C"
,因为libmodbus是一个C库。我编辑了我的资料来源:
extern "C" {
#include <modbus.h>
#include <modbus-udp.h>
}
现在它编译得很好。谢谢!
https://stackoverflow.com/questions/22882120
复制相似问题