gpt4 book ai didi

c++ - Gcc - undefined reference ,但库包含匹配的符号

转载 作者:IT王子 更新时间:2023-10-29 01:26:49 33 4
gpt4 key购买 nike

我试图将我的一个程序与 libmodbus 链接起来开源库。在使用 automake 遇到一些麻烦之后,我终于设法编译了它。

但是现在当我在我自己的程序中使用该库提供的函数之一时,我从 gcc 得到了一个 undefined reference 错误:

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 无法解析符号吗?

最佳答案

正如 noloader 所建议的,我错过了添加 extern "C" 因为 libmodbus 是一个 C 库。我编辑了我的来源:

extern "C" {
#include <modbus.h>
#include <modbus-udp.h>
}

现在可以正常编译了。谢谢!

关于c++ - Gcc - undefined reference ,但库包含匹配的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22882120/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com