Нашел большую проблему в кросс-компиляции, 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");
Извините, если вы не об этом.