Различия версий стандартной библиотеки FMI - C приводят к ошибкам компоновки
У меня есть общедоступный FMU, для которого я пытаюсь связать встроенный файл.so с остальной частью моей программы. (Это содержится в файле.fmu, если вы просматриваете его в виде архива.) На этапе компоновки я получаю следующие неопределенные ошибки ссылок:
RoomHeating_OM_RH.so: undefined reference to '__longjmp_chk@GLIBC_2.11'
RoomHeating_OM_RH.so: undefined reference to '__fread_chk@GLIBC_2.7'
Если я посмотрю на содержание RoomHeating_OM_RH.so с помощью инструмента, как nm -a
Я вижу много неопределенных ссылок этой формы, которые не вызывают ошибок во время ссылки. Вот пара таких строк из nm -a
выход:
U __vsnprintf_chk@@GLIBC_2.3.4
U _setjmp@@GLIBC_2.0
Однако те, которые вызывают ошибки, отличаются от остальных тем, что в названии у них более новые версии GLIBC. Вот что у меня есть в моем /lib dir для библиотеки libc (да, я понимаю, что это старые версии, но это то, что я застрял на данный момент):
/lib/libc-2.5.so
/lib/libc.so.6
Поэтому я предполагаю, что у меня нет новой версии libc, с которой можно было бы связываться. Требуется ли, чтобы версия libc была именно тем, что вызывает файл.so? Или оно должно быть равным или более новым, чем вызванная версия? Кроме того, спецификация FMI даже охватывает этот аспект совместимости? Или предполагается, что если файлы.so предоставляются в FMU, то они ДОЛЖНЫ быть скомпилированы с использованием тех же или более старых версий библиотек, которые будут установлены на целевом компьютере?
1 ответ
Поэтому я предполагаю, что у меня нет новой версии libc, с которой можно было бы связываться.
Правильный.
Требуется ли, чтобы версия libc была именно тем, что вызывает файл.so?
Вам нужен GLIBC-2.11 или новее. Смотрите этот ответ для объяснения.