编译链接器错误Win32 API

时间:2015-02-01 21:47:45

标签: c winapi mingw linker-errors

尝试编译一个具有链接器问题的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

SocketWin.h

#ifndef SOCKETWIN_H
#define SOCKETWIN_H

int winSocket();
void shutdownSocket();

#endif

包括SocketWin.c

#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文件只是创建一个套接字并启动一个线程以进行该套接字的通信。如果我需要提供更多代码,请告诉我。

0 个答案:

没有答案