Ошибка при статической сборке libvorbis и libmp3lame

У меня возникают проблемы при попытке создать статический двоичный файл из ffmpeg – у меня работает почти вся assembly, за исключением двух библиотек – libvorbis и libmp3lame.

Эти две библиотеки не работают во время ./configure, особенно для неопределенных функций из math.h / libm :

 libvorbis: gcc -L/vol/build/lib -static -static-libstdc++ -static-libgcc -Wl,--as-needed -Wl,-z,noexecstack -I/vol/build/include -L/vol/build/lib -o /tmp/ffconf.UKKLGhCv/test /tmp/ffconf.UKKLGhCv/test.o -lvorbis -lm -logg -lstdc++ -lpthread -lexpat -ldl -lm --enable-libopencore-amrnb /vol/build/lib/libvorbis.a(envelope.o): In function `_ve_envelope_init': envelope.c:(.text+0x983): undefined reference to `_ZGVbN2v_sin' envelope.c:(.text+0x9a9): undefined reference to `_ZGVbN2v_sin' /vol/build/lib/libvorbis.a(lsp.o): In function `vorbis_lsp_to_curve': lsp.c:(.text+0x650): undefined reference to `_ZGVbN2v_cos' lsp.c:(.text+0x669): undefined reference to `_ZGVbN2v_cos' libmp3lame: gcc -L/vol/build/lib -static -static-libstdc++ -static-libgcc -Wl,--as-needed -Wl,-z,noexecstack -o /tmp/ffconf.dC4w1f5B/test /tmp/ffconf.dC4w1f5B/test.o -lmp3lame -lm -lstdc++ -lpthread -lexpat -ldl -lm --enable-libopencore-amrnb /vol/build/lib/libmp3lame.a(psymodel.o): In function `init_s3_values': psymodel.c:(.text+0x14d3): undefined reference to `_ZGVbN2v___exp_finite' psymodel.c:(.text+0x14fa): undefined reference to `_ZGVbN2v___exp_finite' /vol/build/lib/libmp3lame.a(psymodel.o): In function `psymodel_init': psymodel.c:(.text+0xb62d): undefined reference to `_ZGVbN4vv___powf_finite' psymodel.c:(.text+0xb677): undefined reference to `_ZGVbN4vv___powf_finite' psymodel.c:(.text+0xb6c4): undefined reference to `_ZGVbN4vv___powf_finite' psymodel.c:(.text+0xb711): undefined reference to `_ZGVbN4vv___powf_finite' psymodel.c:(.text+0xb75b): undefined reference to `_ZGVbN4vv___powf_finite' /vol/build/lib/libmp3lame.a(psymodel.o):psymodel.c:(.text+0xb7a2): more undefined references to `_ZGVbN4vv___powf_finite' follow /vol/build/lib/libmp3lame.a(util.o): In function `fill_buffer': util.c:(.text+0x28a6): undefined reference to `_ZGVbN2v_cos' util.c:(.text+0x28cc): undefined reference to `_ZGVbN2v_cos' util.c:(.text+0x28fb): undefined reference to `_ZGVbN2v_cos' util.c:(.text+0x2921): undefined reference to `_ZGVbN2v_cos' util.c:(.text+0x29cc): undefined reference to `_ZGVbN2v_sin' util.c:(.text+0x29e8): undefined reference to `_ZGVbN2v_sin' 

Я не могу понять, как заставить их успешно строить. Из того, что я понимаю, передачи опции -lm должно быть достаточно, но, очевидно, это не так. Я проверил наличие libm.a , который находится по адресу /usr/lib/x86_64-linux-gnu/libm.a , я также попытался передать этот каталог во флаги -L , но без разницы. При удалении флага -static библиотеки libs прекрасно -static , но полученный двоичный файл (duh) связан с libm.so.

На всякий случай, вот флаги, которые я использую для сборки двух библиотек:

 libvorbis: ./configure --prefix=${CMAKE_BINARY_DIR} --disable-shared --disable-oggtest libmp3lame: ./configure --prefix=${CMAKE_BINARY_DIR} --disable-shared 

Я был бы признателен за любые указания о том, как исправить или отладить это дальше.

Редактировать: после того, как libm с ним еще раз, кажется, что libm становится связанным – когда я -lm флаг -lm , я получаю намного больше неопределенных ссылок – sin , cos , __pow_finite и т. Д. Когда я его помещаю обратно, большинство из них _ZGVbN4vv___powf_finite и остаются только те искаженные символы, как _ZGVbN4vv___powf_finite и _ZGVbN2v_cos .

    Что ж, мне удалось решить эту проблему – поиск в Google искаженных символов, таких как _ZGVbN2v_cos привел меня к этому _ZGVbN2v_cos с упоминанием векторной математики, и в сочетании с выводом ldd во время динамической ссылки с упоминанием libmvec я понял, что мне, возможно, придется связать это также ,

    Для libmp3lame он должен быть связан до libm:

     gcc -L/vol/build/lib -static -o /tmp/ffconf.dC4w1f5B/test /tmp/ffconf.dC4w1f5B/test.o -lmp3lame -lmvec -lm 

    Для libvorbis порядок -lmvec и -lmvec не имеет значения, он -lmvec любом случае.