2013-12-17 1 views
1

Я пытаюсь создать пакет .deb для приложения, которое разрабатывает моя компания (и я). Я пытаюсь создать пакет 64-битный на моем 32-битной Ubuntu (12.04 LTS) с помощью dpkg-buildpackage и я получаю следующие предупреждения/ошибки:Создание 64-битного пакета Debian на 32-битном Ubuntu

dpkg-shlibdeps: warning/error: couldn't find library X needed by Y.so (ELF format: 'elf64-x86-64'; RPATH: 'some/path/that/does/not/exist') 

Когда X является одним из наших скомпилированных разделяемых библиотек, мы получаем предупреждение , Когда это системная библиотека (например, libgcc_s.so.1 и libstdc++.so.6), мы получаем ошибку.

Почему RPATH относится к пути, который не существует?

Кстати, когда я делаю 32-битный пакет (на наших файлах, который был скомпилирован для 32 бит, конечно), он отображает предупреждения (только о наших проприетарных файлах .so), но создает файл .deb.

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

ответ

1

Вам необходимо установить версию 64-бит библиотеки с APT-получить (на самом деле что-нибудь сделать, но это самый простой):

sudo apt-get install libyouneed-dev:amd64 

Хитрость здесь является :amd64, который рассказывает менеджер пакетов для установки 64-разрядной версии этого пакета. То же самое относится к 32-битным библиотекам в 64-разрядных системах. Это называется мультиархией.

Пакет смотрит на этот путь, потому что там хранятся библиотеки 64-разрядных (или 32-битных), но поскольку у вас его нет, путь не существует.

+0

Хорошо, я установил 'lib64stdC++ 6' и решил большинство проблем, но он все еще не смог найти libpthon2.7.so.1.0' (RPATH: ''). Любая идея, как его решить? –

+0

И почему я так много предупреждаю о наших собственных общих библиотеках (похоже, RPATH показывает неправильный путь - путь компиляции, а не дистрибутив)? –

+0

'libpython2.7' есть. – Braiam

1

Установите среду chroot amd64 и создайте там свой пакет. Таким образом, вы избегаете различных многовариантных подводных камней, с дополнительным преимуществом наличия чистой, воспроизводимой сборки.

Есть инструмент, который делает это очень просто: mk-sbuild.

Необходимо установить ubuntu-dev-tools и sbuild.

Затем запустите mk-sbuild --arch=amd64 precise, который настроит среду сборки для вас.

Добавить себя в sbuild группы: adduser <your user name> sbuild

Выход и снова войти в систему, чтобы ваш членство в группе будет отражено.

Вы можете построить свой пакет в изолированном окружении:

sbuild -d precise --arch=amd64 name_of_package.dsc 

Это предполагает, что вы уже построить исходный пакет с debuild -S или аналогичным.