C++ winbase.h中元素的g++makefile“未在此范围内声明”

C++ winbase.h中元素的g++makefile“未在此范围内声明”,c++,c,windows,compilation,makefile,C++,C,Windows,Compilation,Makefile,我正在尝试编译一个包含windows.h的程序,但是我得到了一些错误,例如,对于驻留在winbase.h中的每个元素,都没有在此范围内声明错误:“DCB”。我已经将MinGW路径包含到所需的头中,还尝试将-IC:\MinGW\x86_64-w64-mingw32\include-lwindows添加到CFLAGS变量中。建议 # Command variables CC = g++ DEBUG = -Wall -g CFLAGS = -m64 -I"C:\Program Files\Java\j

我正在尝试编译一个包含windows.h的程序,但是我得到了一些错误,例如,对于驻留在winbase.h中的每个元素,都没有在此范围内声明错误:“DCB”。我已经将MinGW路径包含到所需的头中,还尝试将-IC:\MinGW\x86_64-w64-mingw32\include-lwindows添加到CFLAGS变量中。建议

# Command variables
CC = g++
DEBUG = -Wall -g
CFLAGS = -m64 -I"C:\Program Files\Java\jdk1.7.0_21\include" $(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:例如

如果_WIN32_WINNT>=0x0500

WINBASEAPI BOOL WINAPI GetVolumePathNameALPCSTR、LPSTR、DWORD


正如您所看到的,这需要一个定义。

是的,我刚刚想好了。我有:ifdef\u窗口包括endif,所以我将所有更改为:all:sercom.dll-D\u窗口,然后我得到一系列错误,例如:error:function'…'定义标记为dllimport我还有:ifdef LIBSERCOM\u导出定义sercom\u API\uu declspecdlexport,否则定义sercom\u API\uu declspecdlimport endif,所以我添加了:all:sercom.dll-D\u窗口-DLIBSERCOM_导出,但没有帮助。上面列出的错误是来自winbase标头还是其他地方?好吧,我的错,我必须在CFLAGS变量中定义预处理器指令。既然你发了这封信,虽然我刚发完信就自己填出来了,我还是会接受你的回答。