Рецепт Yocto для ODBC и платформы ARM PostgreSQL
Я пытаюсь написать рецепты BitBake unixodbc, postgresql и psqlodbc для платформы ARM для интеграции с Yocto Project. Прежде всего, я написал собственные рецепты BitBake для unixodbc и postgresql. Эти рецепты создают и упаковывают библиотеки и бины для платформы ARM, как и ожидалось.
Сейчас я пытаюсь написать рецепт для официального драйвера ODBC для PostgreSQL (psqlodbc). Для выполнения задачи настройки psqlodbc необходим инструмент odbc_config (флаг --with-unixodbc), скомпилированный для собственной платформы (x86), для точного выполнения задачи do_configure. Этот инструмент "odbc_config" создан по моему собственному рецепту unixodbc для платформы ARM (как и ожидалось), но не для собственной платформы (x86):
$ file /path/to/tmp/work/armplatform/unixodbc/2.3.1-r0/image/usr/bin/odbc_config /path/to/tmp/work/armplatform/unixodbc/2.3.1-r0/image/usr / bin / odbc_config: 32-разрядный исполняемый файл ELB ELF, ARM, EABI5 версии 1 (SYSV), динамически связанный (использует общие библиотеки), для GNU/Linux 2.6.32, BuildID[sha1]=06728a67598eca297d7dcf83cf15a020c74d11ce, не удален
Проблема заключается в том, что когда мои рецепты psqlodbc пытаются использовать "odbc_config", сгенерированный моим рецептом unixodbc, задача do_configure завершается неудачно с этим сообщением об ОШИБКЕ:
/path/to/tmp/work/armplatform/psqlodbc/09.03.0210-r0/psqlodbc-09.03.0210/configure: строка 4272: /path/to/tmp/work/armplatform/unixodbc/2.3.1-r0/image/usr/bin/odbc_config: невозможно выполнить двоичный файл: ошибка формата Exec
Как правильно управлять этой ситуацией с помощью рецептов BitBake?
1 ответ
Проанализировав ссылку, предоставленную LightenS (спасибо!), Я понял, как правильно решить мою проблему. Ключевым вопросом было определение этой переменной в моем рецепте unixodbc:
BBCLASSEXTEND = "native nativesdk"
После этого вы можете создать этот вариант рецепта unixodbc:
$ bitbake nativesdk-unixodbc
Это создает двоичный файл odbc_config для запуска на платформе MACHINESDK. После этого вы можете настроить конфигурацию рецепта psqlodbc следующим образом:
EXTRA_OECONF += " \
--with-sysroot=${STAGING_DIR_TARGET} \
--with-unixodbc=${STAGING_DIR_NATIVE}/usr \
--enable-shared \
"
Где --with-unixodbc указывает исходный (x86) двоичный файл odbc_config, а --with-sysroot указывает на целевой sysroot. Этого будет достаточно для правильной сборки пакета для рецепта psqlodbc.