C를 사용한 Windows API 프로그래밍 : 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)
  • 다른 OS : Windows 7 및 Windows Server 2008
  • "OpenJobObjectW"및 "OpenJobObjectA"
  • WINVER 정의

나는 c와 windows api에 대한 경험이 많지 않으며이 문제에 대해 아무것도 찾을 수 없으므로 누군가가 나를 지시 할 수 있다면 좋을 것입니다.

API 참조 : OpenJobObject

FK

나는 그것을 해결했다. 문제는 mingw32의 헤더 파일 winbase.h (windows.h를 통해 포함됨)에 Harry Johnston이 의심 한대로 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리뷰
로그인참여 후 검토

관련 기사

nasm win32 프로그래밍 "...에 대한 정의되지 않은 참조"

C 프로그램의 함수에 대한 정의되지 않은 참조

sprintf ()를 사용할 때 __mulhi3에 대한 정의되지 않은 참조-Windows의 Code :: Blocks에서 AVR GCC

Tensorflow C++ API가 `tflite::DefaultErrorReporter()'에 대한 정의되지 않은 참조

ANativeWindow_setBuffersTransform API에 대한 Android 정의되지 않은 참조

C ++ Code :: morsecode ()에 대한 정의되지 않은 참조 및 Code :: alphacode ()에 대한 정의되지 않은 참조

C ++의 클래스 멤버에 대한 "정의되지 않은"참조

C에서 sqrtf () 사용하기 : "`sqrtf '에 대한 정의되지 않은 참조"

C- '-lm'을 사용해도 "sqrt"에 대한 정의되지 않은 참조

ifort / icc를 사용할 때 'main'에 대한 정의되지 않은 참조

OpenCV : cmake를 사용할 때`cv :: imread에 대한 정의되지 않은 참조

안드로이드에서 JNI를 사용하는 '곱하기'에 대한 정의되지 않은 참조

하드 플로트(PowerPC)를 사용할 때 `__floatundisf'에 대한 정의되지 않은 참조

GCC 크로스 컴파일러를 사용할 때 printf에 대한 정의되지 않은 참조

CMake를 사용하여 lib .a로 생성 된 메서드에 대한 정의되지 않은 참조

C ++의 함수에 대한 정의되지 않은 참조

클래스에 대한 C ++ 정의되지 않은 참조 (1 헤더 2 cpp)

C에서 (FUNCTIONNAME)에 대한 정의되지 않은 참조

C ++- "sodium_init"에 대한 정의되지 않은 참조

C ++ / Makefile 오류 :`main '에 대한 정의되지 않은 참조

'WinMain @ 16'에 대한 정의되지 않은 참조 (C ++)

Linux C ++ 오류 : 'dlopen'에 대한 정의되지 않은 참조

c 헤더 파일에 대한 정의되지 않은 참조

C ++ : ERROR에 대한 정의되지 않은 참조

y.tab.c : yylex에 대한 정의되지 않은 참조

Cgo: [C 함수]에 대한 정의되지 않은 참조

WinMain에 대한 정의되지 않은 참조 (C ++ Mingw)

함수에 대한 정의되지 않은 참조? C ++

C ++ : 생성자에 대한 정의되지 않은 참조

TOP 리스트

  1. 1

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  2. 2

    std :: regex의 일관성없는 동작

  3. 3

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  4. 4

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  5. 5

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  6. 6

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  7. 7

    Ionic 2 로더가 적시에 표시되지 않음

  8. 8

    Seaborn에서 축 제목 숨기기

  9. 9

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  10. 10

    복사 / 붙여 넣기 비활성화

  11. 11

    ArrayBufferLike의 typescript 정의의 깊은 의미

  12. 12

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  13. 13

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

  14. 14

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  15. 15

    PRNG 기간보다 순열이 더 많은 목록을 무작위로 섞는 방법은 무엇입니까?

  16. 16

    C # HttpWebRequest 기본 연결이 닫혔습니다. 전송시 예기치 않은 오류가 발생했습니다.

  17. 17

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  18. 18

    잘못된 구성 개체입니다. Webpack이 Angular의 API 스키마와 일치하지 않는 구성 개체를 사용하여 초기화되었습니다.

  19. 19

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  20. 20

    R의 마침표와 숫자 사이에 문자열 삽입

  21. 21

    Assets의 BitmapFactory.decodeStream이 Android 7에서 null을 반환합니다.

뜨겁다태그

보관