我试图编译一个程序,其中包括windows.h,但我得到错误,如"错误:'DCB'未在此范围内声明"对于驻留在winbase.h中的每个元素。我已经将MinGW路径包含到所需的头文件中(还尝试添加-I"C:MinGWx86_64-w64-mingw32include" -lwindows到CFLAGS变量)。建议吗?
# Command variables
CC = g++
DEBUG = -Wall -g
CFLAGS = -m64 -I"C:Program FilesJavajdk1.7.0_21include" $(DEBUG) -c
LFLAGS = -m64 -Wl,--add-stdcall-alias -shared $(DEBUG)
COMP_CMD = $(CC) $(CFLAGS) $<
LINK_CMD = $(CC) $(LFLAGS) $? -o $@
HEAD_STUB_CMD = javah -classpath $(CLASS_PATH) $*
# Path variables
CLASS_PATH = ../bin
INCL_PATH = ../include/
SRC_PATH = ../source/
SUB2 = libsercom/
INCL_PATH2 = $(INCL_PATH)$(SUB2)
SRC_PATH2 = $(SRC_PATH)$(SUB2)
# Define a virtual path for .class in the bin directory
vpath %.class $(CLASS_PATH)
all: sercom.dll
#sercom
SERCOM = sercom
$(SERCOM).dll: $(SERCOM).o
$(LINK_CMD)
$(SERCOM).o : $(SRC_PATH2)win$(SERCOM).c $(INCL_PATH2)$(SERCOM).h $(INCL_PATH2)err$(SERCOM).h
$(COMP_CMD)
clean :
rm *.o *.dll *.h
我建议您打开标题并查看错误列表中列出的名称。它们很可能在那里被包装在预处理器指令中。如果存在,请尝试在CFLAGS中传递所需的定义。
UPD:例如
#if (_WIN32_WINNT>= 0x0500)
WINBASEAPI BOOL WINAPI GetVolumePathNameA(LPCSTR,LPSTR,DWORD);
如您所见,这将需要一个定义。