2016-08-11 3 views
2

Я только что узнал, что glibc 2.23 имеет ошибку относительно функции stdio fmemopen(), см., Например, Using rewind() on a FILE* opened with fmemopen. (Описанное поведение багги не является единственным. Проблемы становятся еще больше, если размер буфера превышает 8192 байта ...)Что необходимо для распространения C-программы, скомпилированной против нестандартного glibc в linux (т. Е. Glibc 2.24)?

Теперь я рассматриваю возможность использования только что выпущенного glibc 2.24, который исправлен эта ошибка. Однако моя целевая пользовательская среда - это компьютеры Ubuntu, и я полагаю, что это займет некоторое время, пока Ubuntu не поддержит glibc 2.24 из коробки.

Итак, с какими проблемами сталкиваюсь, когда я пытаюсь распространять свой код?

Или, некоторые вопросы, связанные:

  • Когда можно ожидать, что Ubuntu будет поддерживать Glibc 2,24?
  • Возможно ли иметь две версии libc в системе?
  • Можно ли связать libc статически?
  • Действительно, мне нужна только часть stdio. Можно ли использовать только stdio от 2.24, это принесет пользу?
+2

http://stackoverflow.com/questions/3214168/linking-static-with-glibc-and-libstdc – stark

+0

@stark: Спасибо. (Чувствую себя немного виноватым, что я не тщательно искал связанные вопросы). – ralfg

ответ

2

Когда я могу ожидать, что Ubuntu будет поддерживать glibc 2.24?

Ubuntu имеет только выпустила версию 16.04 с GLIBC-2.23 link. Вы можете ожидать, что следующий выпуск LTS произойдет через 2 года. Даже тогда вы можете ожидать, что ваши клиенты не будут иметь последнюю версию еще на 5 лет.

Возможно ли иметь две версии libc в системе?

Да, см. this answer. Однако это не тривиальное предложение, и большинство здравомыслящих клиентов откажется от идеи иметь отдельный GLIBC, который им нужно будет построить и сохранить за собой. (И если вы думаете просто дать им готовый экземпляр, вы безумны H^H не понимаю, за что вы подписываетесь).

Можно ли связать libc статически?

Возможно. Если ваше приложение использует NSS (gethostbyname и т. Д., Большинство нетривиальных приложений), то даже статически связанное приложение не будет работать (вы получите предупреждение о связи, например this one).

Действительно, мне нужна только часть stdio. Можно ли использовать только stdio от 2.24, это принесет пользу?

Вы не можете легко выделить stdio из остальных. Даже если вам удастся создать рабочий двоичный файл, возможности его работы правильно - тонкие.