Компиляция двоичного файла pdftohtml для AWS-Lambda: проблемы GLIBC - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь заставить работать счастливую Lambda версию pdftohtml XPDF, но мне не везет.

До сих пор пробовалось следующее:

  • Создан контейнер Dockerзапустил последний образ amazonlinux
  • Я скопировал исходный код в этот контейнер и запустил:

    yum install cmake, gcc, gcc-c ++, freetype-devel

  • Компиляция кода с помощью cmake создает двоичный файл, который отлично работает в контейнере, который должен иметь ту же ОС и среду, что и Lambda.
  • Я подтвердил версию libc.so.6 как 2.26внутри контейнера.
  • Я скопировал это в свою zip-папку AWS и включил следующие зависимости в готовую к загрузке папку lib:

    libfreetype.so.6.10.0, libpng15.so.15, libstdc ++. So.6.0.24

  • Эти зависимости копируются непосредственно из контейнера, используемого для компиляции кода.
  • Затем функция Python соединяет этичерез

    os.environ.update (dict (LD_LIBRARY_PATH = '/ var / task / lib'))

  • В конце я запускаю функцию и получаю следующий код ошибки:

    / var / task / pdftohtml: /lib64/libc.so.6: версия `GLIBC_2.18 'не найдена (требуется /var/task/lib/libstdc++.so.6)

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

Действительно озадачен, ностремится завершить его, поскольку он будет производить легкий двоичный файл, идеально подходящий для лямбда-функции!

Где я ошибаюсь?

РЕДАКТИРОВАТЬ

РЕШЕНО- см. комментарии ниже.Существует две версии AWS Linux, и Lambda работает , эта версия

Я запускал в экземпляре EC2, как предложил один из комментаторов.Хотя libstdc ++. So.6.24 выглядела как правильная версия, поскольку она сама была скомпилирована с другой версией GLIBC, она выдает ошибку.Компиляция в EC2 из исходного кода работала нормально.Другой трюк заключался в том, чтобы CXX_FLAGS включал -std = c ++ 11.Спасибо тем, кто помог мне решить эту проблему!

1 Ответ

0 голосов
/ 18 февраля 2019

Я понятия не имею, откуда взялся GLIBC_2.18, поскольку эта версия отсутствует в контейнере, использованном для его компиляции.

Я думаю, вы не понимаете символзависимости от версии (см. здесь ).

Сообщение об ошибке сообщает, что ваш libstdc++.so.6 был создан для GLIBC-2.18 или новее , и вы работаете противGLIBC-2.17 или старше .

Где я ошибаюсь?

Ваша среда сборки ориентирована на что-то более новое, чем то, что содержится в вашей среде развертывания.

Вам нужно либо найти встроенную среду, соответствующую цели развертывания, либо изменить цель развертывания, чтобы она была не старше вашей среды сборки.

...