【发布时间】:2020-11-28 23:25:12
【问题描述】:
在尝试使用 makefile 在我的项目中包含 ncurses 之后,当我尝试制作 .o 文件时,它给了我这个错误:
In file included from C:/MinGW/x86_64-w64-mingw32/include/stddef.h:7,
from C:/MinGW/lib/gcc/x86_64-w64-mingw32/8.1.0/include/stddef.h:1,
from C:/MinGW/include/stdint.h:54,
from C:/MinGW/include/ncursesw/curses.h:63,
from src/main.c:1:
C:/MinGW/x86_64-w64-mingw32/include/crtdefs.h:35:18: error: expected ';' before 'typedef'
__MINGW_EXTENSION typedef unsigned __int64 size_t;
^~~~~~~~
;
C:/MinGW/x86_64-w64-mingw32/include/crtdefs.h:45:18: error: expected ';' before 'typedef'
__MINGW_EXTENSION typedef __int64 ssize_t;
^~~~~~~~
;
C:/MinGW/x86_64-w64-mingw32/include/crtdefs.h:62:18: error: expected ';' before 'typedef'
__MINGW_EXTENSION typedef __int64 intptr_t;
^~~~~~~~
;
C:/MinGW/x86_64-w64-mingw32/include/crtdefs.h:75:18: error: expected ';' before 'typedef'
__MINGW_EXTENSION typedef unsigned __int64 uintptr_t;
^~~~~~~~
;
C:/MinGW/x86_64-w64-mingw32/include/crtdefs.h:88:18: error: expected ';' before 'typedef'
__MINGW_EXTENSION typedef __int64 ptrdiff_t;
^~~~~~~~
;
C:/MinGW/x86_64-w64-mingw32/include/crtdefs.h:123:18: error: expected ';' before 'typedef'
__MINGW_EXTENSION typedef __int64 __time64_t;
^~~~~~~~
;
In file included from C:/MinGW/include/stdio.h:94,
from C:/MinGW/include/ncursesw/curses.h:164,
from src/main.c:1:
C:/MinGW/include/sys/types.h:123:21: error: conflicting types for 'ssize_t'
typedef _ssize_t ssize_t;
^~~~~~~
In file included from C:/MinGW/x86_64-w64-mingw32/include/stddef.h:7,
from C:/MinGW/lib/gcc/x86_64-w64-mingw32/8.1.0/include/stddef.h:1,
from C:/MinGW/include/stdint.h:54,
from C:/MinGW/include/ncursesw/curses.h:63,
from src/main.c:1:
C:/MinGW/x86_64-w64-mingw32/include/crtdefs.h:45:35: note: previous declaration of 'ssize_t' was here
__MINGW_EXTENSION typedef __int64 ssize_t;
这是我的生成文件:
PROJECT=ProjectName
CC=gcc
CFLAGS=-Wall -std=c11
CPPFLAGS = -MMD -MP
CFLAGS = -Wall $(INC) -g3
LIBS = -L"C:/MinGW/lib" -L"C:/MinGW/x86_64-w64-mingw32/lib" -g3
INC = -I"C:/MinGW/include" -I"C:/MinGW/x86_64-w64-mingw32/include" -I"C:/MinGW/lib/gcc/x86_64-w64-mingw32/8.1.0/include"
SRC_DIR:=src
OBJ_DIR:=obj
BIN_DIR:=bin
EXE:=$(BIN_DIR)/$(PROJECT)
SRC:=$(wildcard $(SRC_DIR)/*.c)
OBJ:=$(SRC:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
-include $(OBJ:.o=.d)
all: $(EXE)
.PHONY: all clean
$(EXE): $(OBJ) | $(BIN_DIR)
@echo ---------------------------Linking
$(CC) $(OBJ) -o $@ $(LIBS)
$(OBJ_DIR)/%.o: $(SRC) | $(OBJ_DIR)
@echo ---------------------------Creating .o files
$(CC) -c $< -o $@ $(CFLAGS)
$(OBJ_DIR) $(BIN_DIR):
@echo ---------------------------Creating Directory
mkdir $@
@echo ---------------------------Directory Created
clean:
@echo ---------------------------Clean started
rmdir /Q /S $(OBJ_DIR)
rmdir /Q /S $(BIN_DIR)
@echo ---------------------------Clean finished
我正在学习用 C 进行编程,但我找不到与此相关的任何内容以及 ncurses 说 curses.h 不存在的其他错误(我尝试了这两个指令 ncursesw/curses.h 和 curses.h) .我不知道操作系统是否重要,但我在 Windows 中运行。主要代码只是本次编译的测试代码:
#include <ncursesw/curses.h>
#include <stdlib.h>
int main()
{
int x=10;
initscr();
raw();
printw("%d",x);
getch();
endwin();
return 0;
}
【问题讨论】:
-
请将 main.c 的源代码添加到包含 curses.h 的位置。
-
您是否从 Linux 复制了源文件而不转换行尾?还是从非 ASCII 源粘贴?
-
是的,因为我下载的是x86_64-posix-seh,所以我会尝试换成win版本
标签: c gcc makefile compilation