【问题标题】:Include of Nvidia's nvapi.h causes compilation errors包含 Nvidia 的 nvapi.h 会导致编译错误
【发布时间】:2017-04-19 17:26:33
【问题描述】:

我正在尝试使用 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

【问题讨论】:

  • 这个问题stackoverflow.com/questions/4176763/… 表明__success 在sal.h 中定义。尝试包括它。同样的问题表明__success 不会改变程序行为,因此如果您对上述标头有问题,可以尝试执行#define __success(...)。
  • 尝试包括 1st,因为头文件看起来包含很多特定于 MS 的#defines。
  • @HolyBlackCat 尝试了你的两个建议,包括sal.h 没有改变任何东西。定义 __success(...) 有点帮助,但我仍然遇到编译错误。 @RichardCritten 我首先尝试包含 &lt;windows.h&gt;,但遗憾的是它并没有改变任何东西。
  • 那些新错误是什么?
  • 关于其他 __in、__inout、pDisplayIdCount 和其他一些未在此范围内声明的编译错误。 NVAPI SDK 中提供的头文件似乎与g++ 不兼容。使用CMake 构建 VS2010 解决方案似乎可行……但我仍然遇到其他问题。

标签: c++ nvidia nvapi


【解决方案1】:

我找到了一个答案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 API 有更好的文档记录,认真
【解决方案2】:

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) 的 cmets 中所述,我必须在 .cpp 文件的顶部添加 #include &lt;Windows.h&gt; 才能正确编译。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多