2015-08-31 4 views
1

Я делаю сеть C библиотека и я также хочу поддержать SCTP. я в этом файле wrapper_socket_functions.cНе удается связать sctp двоичный

/*SCTP WRAPPER */ 
void 
Sctp_bindx(int sd, struct sockaddr *addrs, int addrcnt, int flags) 
{ 
    int rbindx = sctp_bindx(sd, addrs, addrcnt, flags); 
    if(rbindx == -1) 
     prog_error("Sctp_bindx error",true,errno); 
} 
void 
Sctp_connectx(int sd, struct sockaddr *addrs, int addrcnt, sctp_assoc_t *id) 
{ 
    int rconnectx = sctp_connectx(sd, addrs, addrcnt, id); 
    if(rconnectx == -1) 
     prog_error("Sctp_connectx error",true,errno); 
} 
int 
Sctp_peeloff(int sd, sctp_assoc_t assoc_id) 
{ 
    int rpeeloff = sctp_peeloff(sd, assoc_id); 
    if(rpeeloff == -1) 
     prog_error("Sctp_paleof error",true,errno); 
    return rpeeloff; 
} 

И у меня есть этот Makefile.

CC = gcc 
CFLAGS = -lsctp -c -std=gnu11 -g -Wall -o 
LIB_PATH = lib/ 
BIN_PATH = bin/ 

OBJECTS_LIBRARY = bin/error.o bin/signal.o bin/io_socket.o bin/wrapper_socket_functions.o bin/wrapper_stdio.o bin/wrapper_convert.o bin/wrapper_io_socket.o bin/wrapper_unix.o bin/handlers.o bin/miscellaneous.o bin/protocol.o 
CLIENT_FILES = bin/client.o 
SERVER_FILES = bin/server.o 

all: 

    #Compile MAIN_FILES 

    $(CC) $(CFLAGS) $(BIN_PATH)client.o client.c 
    $(CC) $(CFLAGS) $(BIN_PATH)server.o server.c 

    #Compile LIB_FILES 

    $(CC) $(CFLAGS) $(BIN_PATH)handlers.o $(LIB_PATH)handlers.c 
    $(CC) $(CFLAGS) $(BIN_PATH)signal.o $(LIB_PATH)signal.c 
    $(CC) $(CFLAGS) $(BIN_PATH)error.o $(LIB_PATH)error.c 
    $(CC) $(CFLAGS) $(BIN_PATH)wrapper_socket_functions.o $(LIB_PATH)wrapper_socket_functions.c 
    $(CC) $(CFLAGS) $(BIN_PATH)wrapper_stdio.o $(LIB_PATH)wrapper_stdio.c 
    $(CC) $(CFLAGS) $(BIN_PATH)wrapper_convert.o $(LIB_PATH)wrapper_convert.c 
    $(CC) $(CFLAGS) $(BIN_PATH)wrapper_io_socket.o $(LIB_PATH)wrapper_io_socket.c 
    $(CC) $(CFLAGS) $(BIN_PATH)io_socket.o $(LIB_PATH)io_socket.c 
    $(CC) $(CFLAGS) $(BIN_PATH)wrapper_unix.o $(LIB_PATH)wrapper_unix.c 
    $(CC) $(CFLAGS) $(BIN_PATH)miscellaneous.o $(LIB_PATH)miscellaneous.c 
    $(CC) $(CFLAGS) $(BIN_PATH)protocol.o $(LIB_PATH)protocol.c 
    #Link CLIENT 

    $(CC) -o $(BIN_PATH)client $(OBJECTS_LIBRARY) $(CLIENT_FILES) 

    #Link SERVER 

    $(CC) -o $(BIN_PATH)server $(OBJECTS_LIBRARY) $(SERVER_FILES) 

    #Remove unwanted objects 

    rm -rf bin/*.o 

Проблема заключается в том, когда я связать их вместе в двух различных бен сервера и клиента он говорит мне, что это:

undefined reference to sctp_bindx undefined reference to sctp_connectx undefined reference to sctp_peeloff

Обратите внимание, что при компиляции с -lsctp он отлично компилируется но, когда я пытаюсь связать этот файл * .o, он жалуется, как и выше. Кроме того, я установил lksctp_tools и проверил, если мое ядро ​​поддерживает его с checksctp

~ $ checksctp 
Sctp supported 
+2

Linker всегда должна быть помещается * последним *, после всех объектных файлов в зависимости от библиотеки. –

+0

Я пробовал, но он все еще жалуется .. –

+0

Может быть, потому, что вы не используете какие-либо флаги при связывании? –

ответ

2

Снимите CFLAGS агд -lsctp и добавить это в LINKFLAGS = -lsctp и добавить при связывании после библиотеки $(CC) $(LINKFLAGS).

+0

По соглашению один вызывает 'LDFLAGS' то, что вы называете' LINKFLAGS'. – alk

 Смежные вопросы

  • Нет связанных вопросов^_^