在 <intrin.h> 中使用 __cpuid() 时出现链接错误?

Posted

技术标签:

【中文标题】在 <intrin.h> 中使用 __cpuid() 时出现链接错误?【英文标题】:Link error when using the __cpuid() in <intrin.h>? 【发布时间】:2014-04-16 08:21:02 【问题描述】:

错误提示:

error LNK2019: unresolved external symbol WinCPUID_Init referenced in function 
"public: static void __cdecl CCapturer::GetCPUVendorId(void)" 
 (?GetCPUVendorId@CCapturer@@SAXXZ)

但它没有指出我应该在 MSDN _cpuid 中添加哪个库

如何解决?

【问题讨论】:

请出示CCapturer::GetCPUVendorId的声明和电话 声明 public: static void GetCPUVendorId();定义 void CCapturer::GetCPUVendorId()...;调用 CCapturer::GetCPUVendorId() 这是函数的定义,我认为问题出在调用中,你能证明一下吗? @christopher 拜托,请不要在 cmets 中为您的问题发布其他信息,而是将它们本身提出问题。它既不可读,也不对任何人有帮助。 【参考方案1】:

在此处查看我对您问题的回答:http://social.msdn.microsoft.com/Forums/vstudio/en-US/b80068ac-e17b-4f21-85fd-1d87fdc9b6b6/link-error-when-using-the-cpuid-in-intrinh?forum=msbuild

【讨论】:

【参考方案2】:

显然 fddshow-tryout 安装程序也使用了它(我不知道那是什么),并在WinCPUID.dll中定义

external     'WinCPUID_Init@files:WinCPUID.dll cdecl';

我在这里找到了 WinCPUID_Init 符号的匹配项:

http://code.google.com/p/notepad2-mod/source/browse/branches/inno/distrib/cpu_detection.iss?r=616

代码头说

// The script is taken from the ffdshow-tryouts installer
// http://sourceforge.net/projects/ffdshow-tryout/

后来

// functions to detect CPU
function WinCPUID_Init(msGetFrequency: Integer; var pInfo: TCPUInfo): Integer;
external     'WinCPUID_Init@files:WinCPUID.dll cdecl';
// function to get system information
procedure GetSystemInfo(var lpSystemInfo: TSystemInfo); external 'GetSystemInfo@kernel32.dll stdcall';


procedure CPUCheck();
var
  CPUInfo: TCPUInfo;
begin
  WinCPUID_Init(0, CPUInfo);

  if (CPUInfo.bIsInitialized = 0) then begin
    // something went wrong
  end
  else begin
    if (CPUInfo.bSSE_Supported  = 1) then begin
      cpu_sse  := true;
    end;
    if (CPUInfo.bSSE2_Supported = 1) then begin
      cpu_sse2 := true;
    end;
  end;
end;

【讨论】:

以上是关于在 <intrin.h> 中使用 __cpuid() 时出现链接错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 __inbyte 会使我的软件崩溃?

windows黑客技术之自己实现GetProceAddressAndGetModuleHandle

如何检测 Visual C++ 中的 rdtscp 支持?

SIMD 聚集导致的分段错误?

_mm_load_si128 以相反的顺序加载数据

sse矩阵乘法 应该是1毫秒纯运算1000次