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我不想运行这段代码,只检查该函数是否存在(如果代码编译和链接 - 函数存在).
要查看该函数是否存在,请使用
dumpbin /exports kernel32.dll | findstr CreateProcess
Run Code Online (Sandbox Code Playgroud)
您甚至没有使用正确的原型,因此链接器当然无法找到正确的功能.命名约定完全关闭,CreateProcess实际上是一个宏(扩展为CreateProcessA或者W取决于UNICODE).
(您不需要kernel32.lib显式链接,因为默认情况下已经完成了cl.exe)
而不是自己宣布原型,#include <windows.h>.