Windows API编程,使用c:对OpenJobObject的未定义引用

FK

我正在尝试编写一个简短的程序,该程序使我可以按其名称终止Windows作业对象。这是文件TerminateJobObject.c的(简短)代码:

#ifndef _WIN32_WINNT
    #define _WIN32_WINNT 0x600
#endif

#define JOB_OBJECT_TERMINATE 0x0008

#include <windows.h>
#include <tchar.h> 
#include <stdio.h>
#include <limits.h>



LPTSTR jobObjectName; 
HANDLE jobObj; 

int main(int argc, TCHAR *argv[]){
    jobObjectName = argv[0];    
    jobObj = OpenJobObject(JOB_OBJECT_TERMINATE,FALSE,jobObjectName);
    TerminateJobObject(jobObj,0);

}

使用“ gcc TerminateJobObject.c -o TerminateJobObject”进行编译时,出现以下错误:

TerminateJobObject.c: In function 'main'
C:/<...>:TerminateJobObject.c:(.text+0x62):undefined reference to 'OpenJobObject'
collect2: ld returned 1 exit status

我不明白为什么链接器无法解析OpenJobObject。TerminateJobObject已正确链接,并且也来自Windows API。

到目前为止我尝试过的是:

  • 编译器:gcc,clang
  • _WIN32_WINNT的不同版本(0x500,0x600,0x601)
  • 不同的操作系统:Windows 7和Windows Server 2008
  • “ OpenJobObjectW”和“ OpenJobObjectA”
  • 定义WINVER

我对C和Windows API的经验不是很丰富,并且无法找到关于此问题的任何信息,因此如果有人可以向我指出方向,那将是很好的。

api参考:OpenJobObject

FK

我解决了 问题是/是mingw32的头文件winbase.h(包含在windows.h中)缺少了Harry Joston怀疑的OpenJobObject的函数定义。

我在... / mingw / include / winbase.h中添加了以下几行

#define OpenJobObject __MINGW_NAME_AW(OpenJobObject)
WINBASEAPI HANDLE WINAPI OpenJobObjectA (DWORD dwDesiredAccess, WINBOOL bInheritHandle, LPCSTR lpName);
WINBASEAPI HANDLE WINAPI OpenJobObjectW (DWORD dwDesiredAccess, WINBOOL bInheritHandle, LPCWSTR lpName);

我在mingw-w64的winbase.h中找到的

接下来,我将调用更改为“ OpenJobObjectA”,现在可以使用了。:) 谢谢您的帮助!

编辑:正如汉斯·帕桑特(Hans Passant)指出的,一种更干净的方法可能是迁移到mingw-64或其他东西。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

即使配置了搜索目录,CodeBlock仍未定义对Windows API函数的引用

在Windows中使用CMake(mingw)在Qt5.14.0 static中未定义的引用

为什么cmake在Windows上使用cygwin给出netcdf的未定义引用?

使用SDL 2和-static进行编译时,是否收到对各种Windows库的未定义引用?

使用sprintf()时对__mulhi3的未定义引用-Windows上Code :: Blocks中的AVR GCC

在Windows上链接到libjpeg时如何解决“未定义的引用”?

Windows子系统ubuntu中gfortran中对“dgemm_”的未定义引用

在Windows上构建Maliit框架时未定义对“ DummyInputMethod3 :: staticMetaObject”的引用

提升未定义的引用,将Linux交叉编译到Windows

Windows 上 FMOD 的命令行链接,“未定义引用”

在C编程中,什么是“未定义引用”错误?

未定义的Windows参考_ftprintf

使用汇编嵌入数据时出现“未定义引用”错误,使用 mingw-w64 编译 windows(COFF 而不是 ELF)

C ++未定义的引用

用户定义的类型未定义的Windows 10

通过Windows cgo-> gcc-> ld进行的DLL链接给出了“(函数)的未定义引用”错误

Tensorflow c++ api 对`tflite::DefaultErrorReporter()'的未定义引用

(C ++)使用g ++返回“对WinMain @ 16的未定义引用”的Win32 API示例代码

使用混合C和C ++的函数的未定义引用

使用 windows.locaton.href 或 windows.locaton.replace 的 Javascript 重定向不起作用。错误:窗口未定义

在C中使用sqrtf():“对`sqrtf'的未定义引用”

C-即使使用“ -lm”,也未定义对“ sqrt”的引用

使用命名空间C ++的未定义引用

在C ++中使用库时出现“未定义的引用”

Chrome扩展程序未定义chrome.windows

未定义sys_platform x64 Windows

电子(Windows)无法读取未定义的属性“隐藏”

Windows 解释器上未定义 Namedtuple

Windows / wp8的cordova.file未定义