尝试编译一个具有链接器问题的Windows套接字
EXECUTABLES=CLIMain
SRC=CLIMain.c SerialDriverWin.c CLItext.c ReadThreadWin.c TESTterminalOpcode.c SocketWin.c
OBJ=CLIMain.o SerialDriverWin.o CLItext.o ReadThreadWin.o TESTterminalOpcode.o SocketWin.o
CC=gcc
CFLAGS= -lws2_32
all: $(EXECUTABLES)
CLIMain: $(OBJ)
$(CC) $(SRC) $(CFLAGS) -o CLIMain
clean:
del *.o
del CLIMain.exe
C:\cli_terminal>mingw32-make
gcc -lws2_32 -c -o CLIMain.o CLIMain.c
gcc -lws2_32 -c -o SerialDriverWin.o SerialDriverWin.c
gcc -lws2_32 -c -o CLItext.o CLItext.c
gcc -lws2_32 -c -o ReadThreadWin.o ReadThreadWin.c
gcc -lws2_32 -c -o TESTterminalOpcode.o TESTterminalOpcode.c
gcc -lws2_32 -c -o SocketWin.o SocketWin.c
gcc CLIMain.c SerialDriverWin.c CLItext.c ReadThreadWin.c TESTterminalOpcode.c SocketWin.c -lws2_32 -o CLIMain
C:\Users\ilia\AppData\Local\Temp\ccAmUZpG.o:SocketWin.c:(.text+0x229): undefined reference to `getaddrinfo'
C:\Users\ilia\AppData\Local\Temp\ccAmUZpG.o:SocketWin.c:(.text+0x2b4): undefined reference to `freeaddrinfo'
C:\Users\ilia\AppData\Local\Temp\ccAmUZpG.o:SocketWin.c:(.text+0x31b): undefined reference to `freeaddrinfo'
C:\Users\ilia\AppData\Local\Temp\ccAmUZpG.o:SocketWin.c:(.text+0x348): undefined reference to `freeaddrinfo'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: C:\Users\ilia\AppData\Local\Temp\ccAmUZpG.o: bad reloc address 0x20 in s
ection `.eh_frame'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
makefile:14: recipe for target 'CLIMain' failed
mingw32-make: *** [CLIMain] Error 1
#ifndef SOCKETWIN_H
#define SOCKETWIN_H
int winSocket();
void shutdownSocket();
#endif
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#include <winsock2.h> // needed for socket
#include <ws2tcpip.h> // needed for socket
#include <iphlpapi.h> // needed for socket
#include <stdlib.h>
#include <stdio.h>
#pragma comment(lib, "Ws2_32.lib") // needed for socket
我尝试重新排序SocketWin.c的包含,首先包括winsok2.h然后是windows.h以及所有可能的组合。什么都没有运气。我正在使用mingw来编译它。 SocketWin.c文件只是创建一个套接字并启动一个线程以进行该套接字的通信。如果我需要提供更多代码,请告诉我。