我在64位编译cpp代码时遇到异常,同样的代码在用32位编译时工作正常。
我正在使用“Microsoft Visual Studio 9.0 sp1”
我得到的错误是:
cl.exe / Zi / D“WIN32”/ D“_WINDOWS”/ D“_USRDLL”/ D“_WINDLL”/ D “_MBCS”/ D“UNICODE”/ EHsc / TP / nologo / c /Foobjs\DLLVersionCheck.obj / MT -Iinclude -I“C:\ Program Files \ j2sdk1.4.1_02 \ include”-I“C:\ Program Files \ j2sdk1.4.1_02 \ include \ win32“/ Tp src \ DLLVersionCheck.cpp DLLVersionCheck.cpp
C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ INCLUDE \ crtdefs.h(560):错误C2485:'已弃用':无法识别的扩展属性
C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ INCLUDE \ stdio.h(237):错误C2485:'已弃用' :无法识别的扩展属性
C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ INCLUDE \ stdio.h(252):错误C2485:'已弃用' :无法识别的扩展属性
C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ INCLUDE \ stdio.h(256):错误C2485:'已弃用' :无法识别的扩展属性
C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ INCLUDE \ stdio.h(257):错误C2485:'已弃用' :无法识别的扩展属性
C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ INCLUDE \ stdio.h(259):警告C4616:#pragma 警告:警告号码'6530'超出范围,必须介于'4001'之间 和'4999'
C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ INCLUDE \ stdio.h(278):错误C2265:'':对零大小数组的引用是非法的
C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ INCLUDE \ stdio.h(279):警告C4003:实际不够 宏'__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_0_EX'的参数
C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ VC \ INCLUDE \ stdio.h(279):警告C4003:宏'_CRT_INSECURE_DEPRECATE'的实际参数不够
C:\ Program Files (x86)\ Microsoft Visual Studio 9.0 \ VC \ INCLUDE \ stdio.h(279):错误 C2485:'已弃用':无法识别的扩展属性
C:\ Program Files (x86)\ Microsoft Visual Studio 9.0 \ VC \ INCLUDE \ stdio.h(279):错误 C2144:语法错误:缺少';'在输入'char'之前
C:\ Program Files (x86)\ Microsoft Visual Studio 9.0 \ VC \ INCLUDE \ stdio.h(279):错误 C2501:'gets':缺少存储类或类型说明符
C:\程序 文件(x86)\ Microsoft Visual Studio 9.0 \ VC \ INCLUDE \ stdio.h(279): 致命错误C1004:发现文件意外结束NMAKE:致命错误 U1077:'cl.exe':返回代码'0x2'停止。
我正在使用makefile来复制此代码:
# ------------- Directory path for source files -------------
SRC_DIR=src
# ------------- Directory Path for header files -------------
INC_DIR=include
# ------------- Directory Path for object files -------------
OBJ_DIR=objs
# ------------- Directory Path for binary files -------------
DLL_DIR=dll
# ------------- Include directories -------------------
INC= -I$(INC_DIR) -I"$(JAVA_HOME)\include" -I"$(JAVA_HOME)\include\win32"
# ------------- Other Included Libraries -------------------
OTHER_INC=advapi32.lib shell32.lib version.lib Msi.lib
# ------------- Compiler to compile source files ------------
COMPILER=cl.exe
# ------------- Compiler options -------------
COMP_OPT1= /Zi /D "WIN32" /D "_WINDOWS" /D "_USRDLL" /D "_WINDLL" /D "_MBCS" /D "UNICODE" /EHsc \
/TP /nologo /c /Fo$@ /MT
# ----------- Linker name to create executable ---------
LINKER_NAME=link.exe
# -------------- Linker Options -------------
LINKER_OPT=/NOLOGO /DLL /SUBSYSTEM:CONSOLE /OUT:$@
all: make_dir $(DLL_DIR)\ManageEngineExDLLVersionCheck.dll
clean: clean_dll
make_dir:
- mkdir $(DLL_DIR)
- mkdir $(OBJ_DIR)
clean_dll:
- rm -rf $(DLL_DIR)
- rm -rf $(OBJ_DIR)
# ------------- Compilation commands -------------
$(OBJ_DIR)\DLLVersionCheck.obj: $(SRC_DIR)\DLLVersionCheck.cpp
$(COMPILER) $(COMP_OPT1) $(INC) /Tp $(SRC_DIR)\DLLVersionCheck.cpp
$(OBJ_DIR)\ManageEngineExDLLVersionCheck.obj: $(SRC_DIR)\ManageEngineExDLLVersionCheck.cpp
$(COMPILER) $(COMP_OPT1) $(INC) /Tp $(SRC_DIR)\ManageEngineExDLLVersionCheck.cpp
$(OBJ_DIR)\*.obj: $(OBJ_DIR)\DLLVersionCheck.obj \
$(OBJ_DIR)\ManageEngineExDLLVersionCheck.obj
$(DLL_DIR)\ManageEngineExDLLVersionCheck.dll: $(OBJ_DIR)\*.obj
$(LINKER_NAME) $(LINKER_OPT) \
$(OBJ_DIR)\DLLVersionCheck.obj \
$(OBJ_DIR)\ManageEngineExDLLVersionCheck.obj \
$(OTHER_INC)
#*************************************************************************
# End of Makefile
#*************************************************************************