Нашел большую проблему в кросс-компиляции, jamvm

Некоторое время я пытался кросс-компилировать jamvm (включая путь к классам GNU) для встроенного linux (2.6), и я застрял в деликатном месте.

Я постараюсь подвести итог: после множества ошибок я, наконец, скомпилировал пакет для своей архитектуры, но хотя я указал --enable-static в./configure, при попытке запустить jamvm он жалуется на отсутствие GLIBC 2.4, Дело в том, что у меня версия 2.3.5, и компиляция 2.4 для моей архитектуры на данный момент не вариант (это означало бы начать работу с совершенно новой проблемой).

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

Дело в том, что я знаю точные заголовки ядра gcc, glibc, binutils и linux, которые соответствуют моему процессору, но проблема в том, что я не знаю, как включить эту информацию в процесс кросс-компиляции / сборки.

Однако, возможно, я ошибаюсь, полагая, что тот факт, что моя машина использует другой набор инструментов, повлияет на кросс-компиляцию.

Проще говоря, мне нужно кросс-компилировать jamvm таким образом, чтобы он не жаловался на glibc 2.4 или любые другие библиотеки, которые не поддерживаются встроенной системой (при условии, что я знаю правильный набор инструментов для моей архитектуры)

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

1 ответ

Я не уверен, что понимаю вашу проблему на 100%, но, возможно, попробуйте составить список символов, создающих зависимость от GLIBC 2.4, используя:

$ readelf -Ws <your_jamvm_executable_file> | grep \@GLIBC_2\.4

(используйте более расслабленный grep шаблон поиска, если вы не найдете никаких символов)

Затем проверьте, есть ли у других символов в GLIBC другие версии, равные или меньшие, чем у GLIBC v2.3.5. Я буду использовать posix_spawn В качестве примера:

(1:517)$ readelf -Ws /lib/libc.so.6 | grep posix_spawn\@
  1666: 000d8800    51 FUNC    GLOBAL DEFAULT   12 posix_spawn@@GLIBC_2.15
  1667: 00127760    51 FUNC    GLOBAL DEFAULT   12 posix_spawn@GLIBC_2.2

Это означает, что если posix_spawn в GLIBC v2.15 установлено, что ваша программа может быть перекомпилирована для использования posix_spawn из GLIBC v2.2, удалив зависимость GLIBC 2.15 (если posix_spawn является единственным символом в GLIBC v2.15).

Вы можете выбрать, какой posix_spawn версия для использования с помощью этой директивы внутри исходного кода, в начале блока (.c или же .cpp файл), который на самом деле использует символ:

__asm__(".symver posix_spawn,posix_spawn@GLIBC_2.2");

Извините, если вы не об этом.

Другие вопросы по тегам