对 `sctp_get_no_strms' 的未定义引用

问题描述 投票:0回答:3

尝试使用

sctp_get_no_strms
功能时出现链接错误。我正在运行 Slackware 14.1 并安装了 lksctp-tools。

# ls /var/log/packages | grep sctp
lksctp-tools-1.0.16-x86_64-1_SBo

但是libsctp符号列表不包含此功能。

# nm -D /usr/lib64/libsctp.so | grep sctp_get
0000000000001100 T sctp_getaddrlen
00000000000010e0 T sctp_getladdrs
00000000000010c0 T sctp_getpaddrs

lksctp-tools不支持

sctp_get_no_strms
吗?

编译命令如下:

gcc -o srv sctpserv01.o sctp_wrapper.o -L../lib -lsock -lsctp
c linux sockets unix
3个回答
0
投票

使用库中的函数时,需要 #include 适当的头文件 - 例如

#include "unp.h"
,因为函数
sctp_get_no_strms()
在 Stevens Unix Network Planning, Volume 1: The Sockets API, 3rd Edn 中进行了描述并且是特定于那本书的。

请注意,

unp.h
不是标准系统头文件,这就是为什么我使用
"unp.h"
而不是
<unp.h>
(在头文件名周围使用尖括号)。


0
投票

事实证明,该函数是在本书可用的源代码中定义的。令人困惑的是它没有在头文件中声明

unp.h
。它在
sctp/sctp_getnostrms.c
中定义。


0
投票

您想使用此命令重新编译:

gcc -I../lib -g -O2 -D_REENTRANT -Wall -g -c sctp_getnostrm.c ../libunp.a -lpthread -L/usr/local/v6/lib -lm -lsctp

之后,您将在目录

sctp_getnostrm.o
中得到
sctp

最后,重新编译并链接:

gcc -I../lib -g -O2 -D_REENTRANT -Wall -g -o sctpserv01 sctpserv01.o sctp_wrapper.o sctp_getnostrm.o sctp_addr_to_associd.o ../libunp.a -lpthread -L/usr/local/v6/lib -lm -lsctp
© www.soinside.com 2019 - 2024. All rights reserved.