Неопределенные ссылочные ошибки для всех функций при попытке статически связать мою программу на основе SDL2 - PullRequest
3 голосов
/ 26 мая 2020

Я хочу статически связать свою программу на основе C ++ SDL2, но она работает не так, как ожидалось.

Я уже поместил все файлы заголовков, свою программу и файл libSDL2main.a в одну папку. Затем я попытался скомпилировать программу.

g++ -c Static_linking.cpp -o static.o отлично работает

g++ static.o libSDL2main.a -o static но эта строка дает мне много ошибок связывания.

/usr/bin/ld: static.o: in function `main':
Static_linking.cpp:(.text+0x15): undefined reference to `SDL_Init'
/usr/bin/ld: Static_linking.cpp:(.text+0x3c): undefined reference to `SDL_CreateWindow'
/usr/bin/ld: Static_linking.cpp:(.text+0x56): undefined reference to `SDL_CreateRenderer'
/usr/bin/ld: Static_linking.cpp:(.text+0x7b): undefined reference to `SDL_SetRenderDrawColor'
/usr/bin/ld: Static_linking.cpp:(.text+0x87): undefined reference to `SDL_RenderClear'
/usr/bin/ld: Static_linking.cpp:(.text+0x93): undefined reference to `SDL_RenderPresent'
/usr/bin/ld: Static_linking.cpp:(.text+0x9d): undefined reference to `SDL_Delay'
/usr/bin/ld: Static_linking.cpp:(.text+0xa9): undefined reference to `SDL_DestroyWindow'
/usr/bin/ld: Static_linking.cpp:(.text+0xb5): undefined reference to `SDL_DestroyRenderer'
/usr/bin/ld: Static_linking.cpp:(.text+0xca): undefined reference to `SDL_Quit'
collect2: error: ld returned 1 exit status

PS: Все работает, когда я динамически связываю программу с: g++ Static_linking.cpp -lSDL2 -o static

New Discovery

Я ошибался, на самом деле есть файл с именем libSDL2.a (я не 'Не знаю, почему он не появился для меня в файлах, когда я его искал).

Хотя, когда я попробовал g++ static.o libSDL2main.a libSDL2.a -o static, он выдает мне такую ​​страшную и большую ошибку сообщения, что я покажу только здесь начало.

/usr/bin/ld: libSDL2.a(SDL_alsa_audio.o): in function `ALSA_Init':
(.text+0x43): undefined reference to `snd_pcm_open'
/usr/bin/ld: (.text+0x51): undefined reference to `snd_pcm_close'
/usr/bin/ld: (.text+0x5f): undefined reference to `snd_pcm_writei'
/usr/bin/ld: (.text+0x6d): undefined reference to `snd_pcm_readi'
/usr/bin/ld: (.text+0x7b): undefined reference to `snd_pcm_recover'
/usr/bin/ld: (.text+0x89): undefined reference to `snd_strerror'
/usr/bin/ld: (.text+0x97): undefined reference to `snd_pcm_hw_params_copy'
/usr/bin/ld: (.text+0xa5): undefined reference to `snd_pcm_hw_params_any'
/usr/bin/ld: (.text+0xb3): undefined reference to `snd_pcm_hw_params_set_access'
/usr/bin/ld: (.text+0xc1): undefined reference to `snd_pcm_hw_params_set_format'
/usr/bin/ld: (.text+0xcf): undefined reference to `snd_pcm_hw_params_set_channels'
/usr/bin/ld: (.text+0xdd): undefined reference to `snd_pcm_hw_params_get_channels'
/usr/bin/ld: (.text+0xeb): undefined reference to `snd_pcm_hw_params_set_rate_near'
/usr/bin/ld: (.text+0xf9): undefined reference to `snd_pcm_hw_params_set_period_size_near'
...