包含 Nvidia 的 nvapi.h 会导致编译错误
Include of Nvidia's nvapi.h causes compilation errors
我正在尝试使用 NVIDIA 的 nvapi
,但我遇到了我不完全理解的编译错误。也许我使用了错误的编译器?
#include "nvapi.h"
#include <iostream>
int main()
{
printf("Hello nvapi!");
return 0;
}
编译:
g++ nvapi_hello.cpp
输出(由于太长而被截断):
In file included from nvapi_lite_d3dext.h:35:0,
from nvapi.h:6,
from nvapi_hello.cpp:1:
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:134:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Unload();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:134:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Unload();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:134:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Unload();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:153:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetErrorMessage(NvAPI_Status nr,NvAPI_ShortString szDesc);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:153:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetErrorMessage(NvAPI_Status nr,NvAPI_ShortString szDesc);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:153:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetErrorMessage(NvAPI_Status nr,NvAPI_ShortString szDesc);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:174:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetInterfaceVersionString(NvAPI_ShortString szDesc);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:174:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetInterfaceVersionString(NvAPI_ShortString szDesc);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:174:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetInterfaceVersionString(NvAPI_ShortString szDesc);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:319:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GPU_GetEDID(NvPhysicalGpuHandle hPhysicalGpu, NvU32 displayOutputId, NV_EDID *pEDID);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:319:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GPU_GetEDID(NvPhysicalGpuHandle hPhysicalGpu, NvU32 displayOutputId, NV_EDID *pEDID);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:319:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GPU_GetEDID(NvPhysicalGpuHandle hPhysicalGpu, NvU32 displayOutputId, NV_EDID *pEDID);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:669:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_SetView(NvDisplayHandle hNvDisplay, NV_VIEW_TARGET_INFO *pTargetInfo, NV_TARGET_VIEW_MODE targetView);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:669:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_SetView(NvDisplayHandle hNvDisplay, NV_VIEW_TARGET_INFO *pTargetInfo, NV_TARGET_VIEW_MODE targetView);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:669:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_SetView(NvDisplayHandle hNvDisplay, NV_VIEW_TARGET_INFO *pTargetInfo, NV_TARGET_VIEW_MODE targetView);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:808:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_SetViewEx(NvDisplayHandle hNvDisplay, NV_DISPLAY_PATH_INFO *pPathInfo, NV_TARGET_VIEW_MODE displayView);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:808:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_SetViewEx(NvDisplayHandle hNvDisplay, NV_DISPLAY_PATH_INFO *pPathInfo, NV_TARGET_VIEW_MODE displayView);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:808:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_SetViewEx(NvDisplayHandle hNvDisplay, NV_DISPLAY_PATH_INFO *pPathInfo, NV_TARGET_VIEW_MODE displayView);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1030:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetDisplayDriverVersion(NvDisplayHandle hNvDisplay, NV_DISPLAY_DRIVER_VERSION *pVersion);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1030:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetDisplayDriverVersion(NvDisplayHandle hNvDisplay, NV_DISPLAY_DRIVER_VERSION *pVersion);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1030:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetDisplayDriverVersion(NvDisplayHandle hNvDisplay, NV_DISPLAY_DRIVER_VERSION *pVersion);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1159:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeSet(NvU32 expertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1159:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeSet(NvU32 expertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1159:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeSet(NvU32 expertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1167:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeGet(NvU32 *pExpertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1167:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeGet(NvU32 *pExpertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1167:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeGet(NvU32 *pExpertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1209:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeDefaultsSet(NvU32 expertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1209:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeDefaultsSet(NvU32 expertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1209:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeDefaultsSet(NvU32 expertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1216:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeDefaultsGet(NvU32 *pExpertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1216:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeDefaultsGet(NvU32 *pExpertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1216:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeDefaultsGet(NvU32 *pExpertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1251:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_EnumTCCPhysicalGPUs( NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1251:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_EnumTCCPhysicalGPUs( NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1251:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_EnumTCCPhysicalGPUs( NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1282:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_EnumLogicalGPUs(NvLogicalGpuHandle nvGPUHandle[NVAPI_MAX_LOGICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1282:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_EnumLogicalGPUs(NvLogicalGpuHandle nvGPUHandle[NVAPI_MAX_LOGICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1282:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_EnumLogicalGPUs(NvLogicalGpuHandle nvGPUHandle[NVAPI_MAX_LOGICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1308:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetPhysicalGPUsFromDisplay(NvDisplayHandle hNvDisp, NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1308:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetPhysicalGPUsFromDisplay(NvDisplayHandle hNvDisp, NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
...
我安装了 mingw-w64,我使用的是 g++
版本:
g++ (x86_64-posix-sjlj-rev2, Built by MinGW-W64 project) 6.3.0
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
我已经从 https://developer.nvidia.com/gameworksdownload#?search=nvapi
下载了 NVIDIA 的 NVAPI SDK
NVIDIA API 中提供的头文件似乎与 g++
/GCC 编译器不兼容。所以我选择使用微软的 C/C++ x64 编译器。
我使用 CMake
(v3.5.2) 创建了一个 Visual Studio 2010 解决方案,在对我的 CMakeLists.txt
文件进行了一些调整之后,它一直运行良好。
这是我CMakeLists.txt
的内容:
cmake_minimum_required(VERSION 3.5)
include_directories(3rdparty)
link_directories(3rdparty/amd64)
add_executable(nvapi_test nvapi_hello.cpp)
target_link_libraries(nvapi_test nvapi64.lib)
并且 3rdparty
目录包含 nvapi64.lib
所在的 amd64
文件夹,以及 NVAPI 的 *.h
和 *.c
文件。
此外,正如我的问题 (@RichardCritten) 的评论中提到的,我必须在 .cpp
文件的顶部添加 #include <Windows.h>
才能正确编译。
我找到了一个答案 here,解释了这些变量是在文件 nvapi_lite_salstart.h
中使用 #define
创建的,然后在文件 nvapi_lite_salend.h
中使用 #undef
未定义] 分别在每个头文件的开头和结尾调用,如此处在 nvapi.h
:
的开头列出
#include"nvapi_lite_salstart.h" //Remove this line
#include"nvapi_lite_common.h"
#include"nvapi_lite_sli.h"
#include"nvapi_lite_surround.h"
#include"nvapi_lite_stereo.h"
#include"nvapi_lite_d3dext.h"
#include"nvapi_lite_salstart.h" //Add this line to fix the errors
如您所见,"salstart" 文件似乎只需要移至列表末尾,因为出于某种原因它错误地位于顶部。不确定为什么这在 Visual Studio 中正常工作(它没有进行上述修改),但这至少修复了 MinGW 中的那些错误;然而,nVidia 提供的预编译库文件(nvapi.lib
或 nvapi64.lib
)与 MinGW 不兼容,所以你不得不使用 MS Visual Studio.
我正在尝试使用 NVIDIA 的 nvapi
,但我遇到了我不完全理解的编译错误。也许我使用了错误的编译器?
#include "nvapi.h"
#include <iostream>
int main()
{
printf("Hello nvapi!");
return 0;
}
编译:
g++ nvapi_hello.cpp
输出(由于太长而被截断):
In file included from nvapi_lite_d3dext.h:35:0,
from nvapi.h:6,
from nvapi_hello.cpp:1:
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:134:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Unload();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:134:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Unload();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:134:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Unload();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:153:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetErrorMessage(NvAPI_Status nr,NvAPI_ShortString szDesc);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:153:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetErrorMessage(NvAPI_Status nr,NvAPI_ShortString szDesc);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:153:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetErrorMessage(NvAPI_Status nr,NvAPI_ShortString szDesc);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:174:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetInterfaceVersionString(NvAPI_ShortString szDesc);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:174:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetInterfaceVersionString(NvAPI_ShortString szDesc);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:174:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetInterfaceVersionString(NvAPI_ShortString szDesc);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:319:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GPU_GetEDID(NvPhysicalGpuHandle hPhysicalGpu, NvU32 displayOutputId, NV_EDID *pEDID);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:319:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GPU_GetEDID(NvPhysicalGpuHandle hPhysicalGpu, NvU32 displayOutputId, NV_EDID *pEDID);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:319:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GPU_GetEDID(NvPhysicalGpuHandle hPhysicalGpu, NvU32 displayOutputId, NV_EDID *pEDID);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:669:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_SetView(NvDisplayHandle hNvDisplay, NV_VIEW_TARGET_INFO *pTargetInfo, NV_TARGET_VIEW_MODE targetView);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:669:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_SetView(NvDisplayHandle hNvDisplay, NV_VIEW_TARGET_INFO *pTargetInfo, NV_TARGET_VIEW_MODE targetView);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:669:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_SetView(NvDisplayHandle hNvDisplay, NV_VIEW_TARGET_INFO *pTargetInfo, NV_TARGET_VIEW_MODE targetView);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:808:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_SetViewEx(NvDisplayHandle hNvDisplay, NV_DISPLAY_PATH_INFO *pPathInfo, NV_TARGET_VIEW_MODE displayView);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:808:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_SetViewEx(NvDisplayHandle hNvDisplay, NV_DISPLAY_PATH_INFO *pPathInfo, NV_TARGET_VIEW_MODE displayView);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:808:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_SetViewEx(NvDisplayHandle hNvDisplay, NV_DISPLAY_PATH_INFO *pPathInfo, NV_TARGET_VIEW_MODE displayView);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1030:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetDisplayDriverVersion(NvDisplayHandle hNvDisplay, NV_DISPLAY_DRIVER_VERSION *pVersion);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1030:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetDisplayDriverVersion(NvDisplayHandle hNvDisplay, NV_DISPLAY_DRIVER_VERSION *pVersion);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1030:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetDisplayDriverVersion(NvDisplayHandle hNvDisplay, NV_DISPLAY_DRIVER_VERSION *pVersion);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1159:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeSet(NvU32 expertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1159:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeSet(NvU32 expertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1159:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeSet(NvU32 expertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1167:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeGet(NvU32 *pExpertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1167:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeGet(NvU32 *pExpertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1167:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeGet(NvU32 *pExpertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1209:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeDefaultsSet(NvU32 expertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1209:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeDefaultsSet(NvU32 expertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1209:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeDefaultsSet(NvU32 expertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1216:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeDefaultsGet(NvU32 *pExpertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1216:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeDefaultsGet(NvU32 *pExpertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1216:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_OGL_ExpertModeDefaultsGet(NvU32 *pExpertDetailLevel,
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1251:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_EnumTCCPhysicalGPUs( NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1251:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_EnumTCCPhysicalGPUs( NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1251:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_EnumTCCPhysicalGPUs( NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1282:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_EnumLogicalGPUs(NvLogicalGpuHandle nvGPUHandle[NVAPI_MAX_LOGICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1282:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_EnumLogicalGPUs(NvLogicalGpuHandle nvGPUHandle[NVAPI_MAX_LOGICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:99:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_Initialize();
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:42: error: expected primary-expression before 'return'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1282:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_EnumLogicalGPUs(NvLogicalGpuHandle nvGPUHandle[NVAPI_MAX_LOGICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: warning: '__success' initialized and declared 'extern'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1308:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetPhysicalGPUsFromDisplay(NvDisplayHandle hNvDisp, NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:41: error: redefinition of 'int __success'
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
nvapi.h:1308:1: note: in expansion of macro 'NVAPI_INTERFACE'
NVAPI_INTERFACE NvAPI_GetPhysicalGPUsFromDisplay(NvDisplayHandle hNvDisp, NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS], NvU32 *pGpuCount);
^~~~~~~~~~~~~~~
nvapi_lite_salstart.h:821:32: note: 'int __success' previously defined here
#define NVAPI_INTERFACE extern __success(return == NVAPI_OK) NvAPI_Status __cdecl
^
...
我安装了 mingw-w64,我使用的是 g++
版本:
g++ (x86_64-posix-sjlj-rev2, Built by MinGW-W64 project) 6.3.0
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
我已经从 https://developer.nvidia.com/gameworksdownload#?search=nvapi
下载了 NVIDIA 的 NVAPI SDKNVIDIA API 中提供的头文件似乎与 g++
/GCC 编译器不兼容。所以我选择使用微软的 C/C++ x64 编译器。
我使用 CMake
(v3.5.2) 创建了一个 Visual Studio 2010 解决方案,在对我的 CMakeLists.txt
文件进行了一些调整之后,它一直运行良好。
这是我CMakeLists.txt
的内容:
cmake_minimum_required(VERSION 3.5)
include_directories(3rdparty)
link_directories(3rdparty/amd64)
add_executable(nvapi_test nvapi_hello.cpp)
target_link_libraries(nvapi_test nvapi64.lib)
并且 3rdparty
目录包含 nvapi64.lib
所在的 amd64
文件夹,以及 NVAPI 的 *.h
和 *.c
文件。
此外,正如我的问题 (@RichardCritten) 的评论中提到的,我必须在 .cpp
文件的顶部添加 #include <Windows.h>
才能正确编译。
我找到了一个答案 here,解释了这些变量是在文件 nvapi_lite_salstart.h
中使用 #define
创建的,然后在文件 nvapi_lite_salend.h
中使用 #undef
未定义] 分别在每个头文件的开头和结尾调用,如此处在 nvapi.h
:
#include"nvapi_lite_salstart.h" //Remove this line
#include"nvapi_lite_common.h"
#include"nvapi_lite_sli.h"
#include"nvapi_lite_surround.h"
#include"nvapi_lite_stereo.h"
#include"nvapi_lite_d3dext.h"
#include"nvapi_lite_salstart.h" //Add this line to fix the errors
如您所见,"salstart" 文件似乎只需要移至列表末尾,因为出于某种原因它错误地位于顶部。不确定为什么这在 Visual Studio 中正常工作(它没有进行上述修改),但这至少修复了 MinGW 中的那些错误;然而,nVidia 提供的预编译库文件(nvapi.lib
或 nvapi64.lib
)与 MinGW 不兼容,所以你不得不使用 MS Visual Studio.