ubuntuusers.de

Gemischte Architekturen für einen Build

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

botmeister

Anmeldungsdatum:
19. April 2009

Beiträge: 91

Wohnort: ca. 30km von München

Moin,

versuche sein langem mal wieder ein Päckchen zu bauen. Genauer gesagt, versuche ich das zu automatisieren. Die Software braucht libusb-1.0-0-dev und soll später auf einem ARM-Rechner laufen.

Also ubuntu-ports-Repo auf meiner amd64-Maschine eingebunden und "apt-get install libusb-1.0-0-dev:armhf" eingetippt. Das wollte apt nicht machen und zählte die Abhängigkeiten auf, die ich dann dazu gefügt habe. Letztendlich warnt mich apt mit folgendem Output, fortzufahren:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# apt-get install -y libc6:armhf libudev1:armhf libusb-1.0-0-dev:armhf libusb-1.0-0:armhf
Reading package lists...
Building dependency tree...
Reading state information...
The following packages were automatically installed and are no longer required:
  gcc-5-arm-linux-gnueabihf-base gcc-5-cross-base git-man krb5-locales
  libasan2-armhf-cross libatomic1-armhf-cross libc6-armhf-cross
  libc6-dev-armhf-cross libgcc-5-dev-armhf-cross libgcc1-armhf-cross
  libgomp1-armhf-cross libstdc++6-armhf-cross libubsan0-armhf-cross
  libx11-data linux-libc-dev linux-libc-dev-armhf-cross manpages manpages-dev
  netbase
Use 'apt autoremove' to remove them.
The following additional packages will be installed:
  gcc-6-base:armhf libgcc1:armhf
Suggested packages:
  glibc-doc:armhf debconf:armhf | debconf-2.0:armhf locales:armhf
Recommended packages:
  libusb-1.0-doc:armhf
The following packages will be REMOVED:
  adduser apt base-files base-passwd bash binutils
  binutils-arm-linux-gnueabihf bsdutils build-essential bzip2 ca-certificates
  coreutils cpp cpp-5 cpp-5-arm-linux-gnueabihf cpp-arm-linux-gnueabihf dash
  debconf debianutils diffutils dpkg dpkg-dev e2fslibs e2fsprogs fakeroot
  findutils g++ g++-5 gcc gcc-5 gcc-5-arm-linux-gnueabihf
  gcc-arm-linux-gnueabihf git gnupg gpgv grep gzip hostname ifupdown init
  init-system-helpers initscripts insserv iproute2 isc-dhcp-client
  isc-dhcp-common less libacl1 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libapparmor1 libapt-pkg5.0
  libasan2 libasn1-8-heimdal libatm1 libatomic1 libattr1 libaudit1 libblkid1
  libbsd0 libbz2-1.0 libc-bin libc-dev-bin libc6 libc6-dev libcap2 libcap2-bin
  libcc1-0 libcilkrts5 libcomerr2 libcryptsetup4 libcurl3-gnutls libdb5.3
  libdebconfclient0 libdevmapper1.02.1 libdns-export162 libdpkg-perl libedit2
  liberror-perl libexpat1 libfakeroot libfdisk1 libffi6 libfile-fcntllock-perl
  libgcc-5-dev libgcc1 libgcrypt20 libgdbm3 libgmp10 libgnutls30 libgomp1
  libgpg-error0 libgssapi-krb5-2 libgssapi3-heimdal libhcrypto4-heimdal
  libheimbase1-heimdal libheimntlm0-heimdal libhogweed4 libhx509-5-heimdal
  libidn11 libisc-export160 libisl15 libitm1 libk5crypto3 libkeyutils1
  libkmod2 libkrb5-26-heimdal libkrb5-3 libkrb5support0 libldap-2.4-2 liblsan0
  liblz4-1 liblzma5 libmnl0 libmount1 libmpc3 libmpfr4 libmpx0 libncurses5
  libncursesw5 libnettle6 libp11-kit0 libpam-modules libpam-modules-bin
  libpam-runtime libpam0g libpcre3 libperl5.22 libpopt0 libprocps4
  libquadmath0 libreadline6 libroken18-heimdal librtmp1 libsasl2-2
  libsasl2-modules libsasl2-modules-db libseccomp2 libselinux1 libsemanage1
  libsepol1 libsmartcols1 libsqlite3-0 libss2 libssl1.0.0 libstdc++-5-dev
  libstdc++6 libsystemd0 libtasn1-6 libtinfo5 libtsan0 libubsan0 libudev1
  libusb-0.1-4 libustr-1.0-1 libuuid1 libwind0-heimdal libx11-6 libxau6
  libxcb1 libxdmcp6 libxext6 libxmuu1 libxtables11 locales login make makedev
  mawk mount multiarch-support ncurses-bin openssh-client openssl passwd patch
  perl perl-base perl-modules-5.22 procps readline-common rename rsync sed
  systemd systemd-sysv sysv-rc sysvinit-utils tar tzdata util-linux xauth
  xz-utils zlib1g
The following NEW packages will be installed:
  gcc-6-base:armhf libc6:armhf libgcc1:armhf libudev1:armhf libusb-1.0-0:armhf
  libusb-1.0-0-dev:armhf
WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
  apt libapt-pkg5.0 (due to apt) libc6 (due to apt) libgcc1 (due to apt)
  libstdc++6 (due to apt) init-system-helpers (due to apt) gpgv (due to apt)
  gnupg (due to apt) adduser (due to apt) base-files base-passwd
  libdebconfclient0 (due to base-passwd) bash dash (due to bash)
  libtinfo5 (due to bash) debianutils (due to bash) bsdutils
  libsystemd0 (due to bsdutils) coreutils libacl1 (due to coreutils)
  libattr1 (due to coreutils) libselinux1 (due to coreutils)
  dpkg (due to dash) diffutils libbz2-1.0 (due to dpkg) liblzma5 (due to dpkg)
  zlib1g (due to dpkg) tar (due to dpkg) e2fsprogs e2fslibs (due to e2fsprogs)
  libblkid1 (due to e2fsprogs) libcomerr2 (due to e2fsprogs)
  libss2 (due to e2fsprogs) libuuid1 (due to e2fsprogs)
  util-linux (due to e2fsprogs) findutils grep libpcre3 (due to grep) gzip
  hostname init systemd-sysv (due to init) libc-bin login
  libaudit1 (due to login) libpam0g (due to login)
  libpam-runtime (due to login) libpam-modules (due to login) mount
  libmount1 (due to mount) libsmartcols1 (due to mount)
  libudev1 (due to mount) ncurses-bin perl-base sed
  libfdisk1 (due to util-linux) libncursesw5 (due to util-linux)
  sysvinit-utils (due to util-linux)
0 upgraded, 6 newly installed, 195 to remove and 0 not upgraded.
E: Essential packages were removed and -y was used without --allow-remove-essential.

So wie ich das verstehe, soll das halbe System ersetzt werden. Gibt es einen Weg, wie ich das umgehen kann?

Grüße Michael

TheDarkRose

Avatar von TheDarkRose

Anmeldungsdatum:
28. Juli 2010

Beiträge: 3459

Das die dev-Pakete libheaders liefern, die im Quelltext vorliegen, sind diese Architekturunabhängig und du brauchst keine speziellen armhf Pakete installieren. Compileflags werden vom Crosscompiler korrekt beachtet.

botmeister

(Themenstarter)

Anmeldungsdatum:
19. April 2009

Beiträge: 91

Wohnort: ca. 30km von München

Ja Kompilieren dürfte wohl so gehen, aber linken? Ich muss ja das Programm so vorbereiten dass es auf der Architektur mit der Bibliothek läuft. Oder klappt das dynamische linken auch ohne Bibliothek? Ich dachte da braucht es die Sprungtabelle aus der fertigen Bibliothek...

(Ich probier das gleich mal aus, vllt. bist Du nur mit der Antwort schneller)

botmeister

(Themenstarter)

Anmeldungsdatum:
19. April 2009

Beiträge: 91

Wohnort: ca. 30km von München

Hat leider nicht geklappt. Kompilieren klappt, aber linken nicht:

1
2
# arm-linux-gnueabihf-gcc -std=c99 -Wall -Wextra -Wno-unused-result -D_POSIX_C_SOURCE=200112L -D_BSD_SOURCE -D_DEFAULT_SOURCE -Iinclude/  `pkg-config --cflags libusb-1.0`  -o sunxi-fel fel.c progress.c soc_info.c fel_lib.c  `pkg-config --libs libusb-1.0`
/usr/lib/gcc-cross/arm-linux-gnueabihf/5/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lusb-1.0

Würde es gern vermeiden, dass ich libusb-1.0 auch selbst bauen muss (um sicher zu stellen, dass das dann reproduzierbar läuft).

TheDarkRose

Avatar von TheDarkRose

Anmeldungsdatum:
28. Juli 2010

Beiträge: 3459

Ok, mein Fehler. Bis jetzt auch nie gcc per Hand cross-compiled. Immer schön auf fertige Toolschains mit builroot, configure und make zurückgegriffen, die dürften die Abhängigen libs zum linken direkt im buildroot mitgebracht haben, daher nicht das Problem mit apt. Wohin soll es denn gehen? Gibt es da nicht eine passende Toolchain/Buildroot-Distribution?

botmeister

(Themenstarter)

Anmeldungsdatum:
19. April 2009

Beiträge: 91

Wohnort: ca. 30km von München

Richtung automatischer Paketbau via Jenkins oder ähnliches.

Zielsystem ist Ubuntu 16 auf einem Cubieboard (ARM 32-Bit, sunXi). Plan war, das ganze in einem Docker-Container bauen zu lassen, weil dann nicht das eigene System "kontaminiert" wird. Etwas ohne Abhängigkeiten zu bauen funktioniert auch.

Da gibt's Software, die man gerne per Paket aktualisieren möchte und nicht über so Krücken wie checkinstall pflegen möchte.

Bis jetzt musste ich feststellen, dass sich Pakete für dpkg-basierte Systeme immer auf gleichen Betriebssystemen und deren Versionen bauen lassen, daher als Basis das Ubuntu-Xenial-Docker-Abbild. Vielleicht muss ich da ein eigenes Image (mit RootFS für Ubuntu-16-ARM) bauen und mit qemu-static emulieren. Das wäre zwar schrecklich langsam, könnte aber funktionieren...

Vielleicht gibt es aber was eleganteres? Kennst du was?

Linaro und DENX ELDK haben kein libusb-1.0 integriert (zweiteres hat zwar libusb, aber das ist ein anderes Projekt), all-zu-viele weitere kenne ich nicht.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11261

Wohnort: München

botmeister schrieb:

Vielleicht muss ich da ein eigenes Image (mit RootFS für Ubuntu-16-ARM) bauen und mit qemu-static emulieren. Das wäre zwar schrecklich langsam, könnte aber funktionieren...

Das müsste man mit einer minimalen Build-Umgebung eigentlich abkürzen können, wenn sich das Ubuntu auf dem Cubieboard halbwegs an die Standards hält: https://jodal.no/2015/03/08/building-arm-debs-with-pbuilder/

Antworten |