Windows功能的链接错误

2 c windows linker name-decoration

我正在尝试测试标准库(kernel32.dll)是否具有其中一个功能.

用于测试的代码段:

extern void CreateProcessA (void);
int
main (void)
{
  CreateProcessA ();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

代码编译和链接如下:

cl /c test.c
link test.obj kernel32.lib
Run Code Online (Sandbox Code Playgroud)

这段代码可以用Visual C++编译好,但不能链接:

test.obj : error LNK2019: unresolved external symbol _CreateProcessA referenced in function _main
Run Code Online (Sandbox Code Playgroud)

但是函数CreateProcessA确实存在于kernel32.dll中,你没有?

如何正确链接?

PS我不想运行这段代码,只检查该函数是否存在(如果代码编译和链接 - 函数存在).

Ale*_*ski 8

要查看该函数是否存在,请使用

dumpbin /exports kernel32.dll | findstr CreateProcess
Run Code Online (Sandbox Code Playgroud)

您甚至没有使用正确的原型,因此链接器当然无法找到正确的功能.命名约定完全关闭,CreateProcess实际上是一个宏(扩展为CreateProcessA或者W取决于UNICODE).

(您不需要kernel32.lib显式链接,因为默认情况下已经完成了cl.exe)

而不是自己宣布原型,#include <windows.h>.