尝试使用
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
使用库中的函数时,需要 #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>
(在头文件名周围使用尖括号)。
事实证明,该函数是在本书可用的源代码中定义的。令人困惑的是它没有在头文件中声明
unp.h
。它在sctp/sctp_getnostrms.c
中定义。
您想使用此命令重新编译:
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