これは私の命令です。
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 ++"の直後の前面に移動すると正常に動作します。