지정된 라이브러리에서 해당 함수를 찾을 수 없는 이유는 무엇입니까?

지정된 라이브러리에서 해당 함수를 찾을 수 없는 이유는 무엇입니까?

이건 내 명령이야

g++ -L/usr/lib/x86_64-linux-gnu -lSDL2 -lSDL2_image `sdl2-config  --cflags --libs` sdl2-test.cpp -o sdl2-test

내가 얻는 결과는 다음과 같습니다.

/usr/bin/ld: /tmp/cc4uSTR6.o: in function `main':
sdl2-test.cpp:(.text+0x29): undefined reference to `SDL_Init'
/usr/bin/ld: sdl2-test.cpp:(.text+0x51): undefined reference to `SDL_GetError'
/usr/bin/ld: sdl2-test.cpp:(.text+0x70): undefined reference to `IMG_Init'
....

그러나 실제로는 지정된 디렉토리/라이브러리에서 "정의되지 않은 참조" 목록을 발견했습니다.

stan@stan-ubuntu1:/usr/lib/x86_64-linux-gnu$ ll libSDL2.a libSDL2_image.a
-rw-r--r-- 1 root root 3141130  五  31  2022 libSDL2.a
-rw-r--r-- 1 root root  215674  二   1  2022 libSDL2_image.a

stan@stan-ubuntu1:/usr/lib/x86_64-linux-gnu$ readelf -s libSDL.a | grep _Init
     9: 0000000000000000   385 FUNC    GLOBAL DEFAULT    1 SDL_InitSubSystem
    18: 0000000000000190    80 FUNC    GLOBAL DEFAULT    1 SDL_Init
    44: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND SDL_InitSubSystem
   135: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND SDL_Init
     3: 0000000000000010     5 FUNC    GLOBAL HIDDEN     1 DUMMY_InitOSKeymap
    23: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND DUMMY_InitOSKeymap
    38: 0000000000000300   850 FUNC    GLOBAL HIDDEN     1 X11_InitKeymap
    85: 0000000000001ac0     9 FUNC    GLOBAL HIDDEN     1 X11_InitOSKeymap
   195: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND X11_InitOSKeymap
    24: 00000000000002a0     9 FUNC    GLOBAL HIDDEN     1 DGA_InitOSKeymap
    25: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND X11_InitKeymap
    58: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND DGA_InitOSKeymap
....

그렇다면 왜 g++ 명령에서 이러한 함수를 찾을 수 없습니까?

답변1

Steeldrver가 말했듯이 명령을 수정하고 명령줄에서 매개변수 순서를 변경했는데 작동했습니다. 수정된 명령은 다음과 같습니다.

g++  sdl2-test.cpp  -L/usr/lib/x86_64-linux-gnu -lSDL2 -lSDL2_image `sdl2-config  --cflags --libs` -o sdl2-test

sdl2-test.cpp를 "g++" 바로 뒤의 앞쪽으로 이동하면 제대로 작동합니다.

관련 정보