В зависимости от того, что я делаю, я либо получаю
Нет такого аудиоустройства
если я оставлю определение своего аудиоустройства до SDL2, или я получу
Не удалось загрузить libasound.a: /home/aypahyo/.conan/data/libalsa/1.2.4// /package/d48130e0dd76369b1338deb3b2372c5a649f9f2d/lib/libasound.a: недопустимый заголовок ELF
когда я установил SDL_AUDIODRIVER=alsa
. (Сообщение об ошибке на самом деле обрезано, я добавил r в конце).
Вот реализация, которая показывает ошибку:
#include <SDL.h>
#include <iostream>
void SetupWant(SDL_AudioSpec * want);
void PrintError(std::string source);
void run()
{
//https://wiki.libsdl.org/FAQUsingSDL
putenv((char *)"SDL_AUDIODRIVER=alsa");
if(0 != SDL_Init(SDL_INIT_AUDIO)) PrintError("SDL_Init");
SDL_AudioSpec want, have;
SDL_AudioDeviceID dev;
SetupWant(&want);
dev = SDL_OpenAudioDevice(NULL, 0, &want, &have, SDL_AUDIO_ALLOW_FORMAT_CHANGE);
if (0 == dev) PrintError("SDL_OpenAudioDevice");
}
void SetupWant(SDL_AudioSpec * want)
{
SDL_memset(want, 0, sizeof(SDL_AudioSpec));
want->freq = 48000;
want->format = AUDIO_F32;
want->channels = 2;
want->samples = 4096;
}
void PrintError(std::string source)
{
std::cout << "error " << source << ": " << SDL_GetError() << "\n";
}
Я установил зависимости в своем проекте CMake с помощью conan. Вот файл conan:
[requires]
sdl2/2.0.12@bincrafters/stable
sdl2_image/2.0.5@bincrafters/stable
sdl2_mixer/2.0.4@bincrafters/stable
flac/1.3.2@bincrafters/stable
glib/2.64.0@bincrafters/stable
boost/1.71.0@conan/stable
zlib/1.2.11@conan/stable
bzip2/1.0.8@conan/stable
gtest/1.10.0
glm/0.9.9.8
libmpg123/1.25.13@bincrafters/stable
libalsa/1.2.4
[generators]
cmake
Зависимость sdl2/2.0.12@bincrafters/stable
не поставляется с исходной папкой, однако я могу использовать пакет sdl2/2.0.10@bincrafters/stable
для запуска sdl2 ./configure.
Вот краткое изложение:
SDL2 Configure Summary:
Building Shared Libraries
Building Static Libraries
Enabled modules : atomic audio video render events joystick haptic sensor power filesystem threads timers file loadso cpuinfo assembly
Assembly Math : mmx 3dnow sse sse2 sse3
Audio drivers : disk dummy oss alsa(dynamic) pulse(dynamic) jack(dynamic) nas(dynamic)
Video drivers : dummy x11(dynamic) opengl opengl_es2 vulkan
X11 libraries : xcursor xdbe xinerama xinput2 xinput2_multitouch xrandr xscrnsaver xshape xvidmode
Input drivers : linuxev linuxkd
Using libsamplerate : NO
Using libudev : NO
Using dbus : YES
Using ime : YES
Using ibus : NO
Using fcitx : NO
В большинстве результатов Google в основном указываются имена пакетов, которые необходимо установить, а затем необходимо перестроить sdl2. Я делал это с любой библиотекой, которую мог найти таким способом.
Единственный другой совет, который я нашел, - это явно установить аудиодрайвер, что и приводит к проблеме с заголовком ELF.
Я новичок в Linux, а также в Conan и cmake. Я изо всех сил пытаюсь определить, что еще может быть сломано.
Это может быть проблема, которая является локальной для моей машины, но, судя по количеству обращений, которые я нашел в Интернете, я думаю, что эта общая проблема представляет более широкий интерес.
У меня вопрос: что не так с моей настройкой и как это исправить?
РЕДАКТИРОВАТЬ:
Я скопировал файл libasound.a
в шестнадцатеричном формате, вот несколько первых битов:
00000000: 21 3C 61 72 63 68 3E 0A 2F 20 20 20 20 20 20 20 !<arch>./.......
00000010: 20 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20 ........0.......
00000020: 20 20 20 20 30 20 20 20 20 20 30 20 20 20 20 20 ....0.....0.....
00000030: 30 20 20 20 20 20 20 20 36 33 33 30 32 20 20 20 0.......63302...
Читая ELF, он не похож на файл elf, который объясняет, почему загрузка его в предположении, что это файл elf, не удалась. Так что, может быть, отсюда и моя несовместимость.
Редактировать №1: я написал сообщение на libsdl.org.
Редактировать №2: я следил за публикацией в bincrafters / community
Курс №3: Эрик Леманисье создал запрос на вытягивание, который кажется быть частью решения.
--build=all
командеconan install
, чтобы позволить conan скомпилировать все зависимости. Или просто--build=sdl2 --build sdl2_mixer --build sdl2_image
. - person darcamo   schedule 06.11.2020--build=sdl2 --build sdl2_mixer --build sdl2_image
, а после этого--build=sdl2 --build sdl2_mixer --build sdl2_image --build=libalsa
перекомпилировать Conan. Все та же ошибка. - person Johannes   schedule 06.11.2020--build=all
? Он должен скомпилировать все зависимости, но я не уверен, что он также скомпилирует их зависимости. В идеале вы хотите определить, какая из библиотек, которые вы добавляете в свой файл conanfile, на самом деле зависит от libasound и используйте--build=identified_library
. Кроме того, указав библиотеку, вы можете опубликовать проблему в репозитории рецептов conan этой библиотеки. В случае сборщиков мусора это этот репозиторий. - person darcamo   schedule 06.11.2020