компиляция linaro cross с зависимостью .deb

Я не могу найти ответы, поэтому я прошу здесь.

Я использую кросс-компилятор Linaro 64bit ARM для компиляции моего кода на локальном Ubuntu 14.04 64-битной Linux на Intel (gcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++). [ ! d1]

Мой код требует использования libsensor4 и libsensor4-dev с опцией компоновщика -lsensors. У меня нет проблем с компиляцией моего кода с использованием 64-битного Ubuntu 14.04 хоста Linux на Intel. Но каждый раз, когда я компилирую свой код с использованием 64-битного кросс-компилятора ARM, он имеет ошибки:

cannot find -lsensors

и

sensors/sensors.h: no such file or directory.

-lsensors находится в libsensors4.deb, а кнопка sensors.h - от libsensors4-dev. так как я могу получить эти два пакета в кросс-компилятор Linaro?

0
задан 13 April 2017 в 20:41

7 ответов

Один из способов получить пакеты aarch64 в системе сборки - включить его в качестве внешней архитектуры:

sudo dpkg --add-architecture aarch64 sudo apt-get update

Теперь вы можете удалить libsensors4-dev для своей архитектуры сборки и установить ее для архитектура хоста aarch64:

sudo apt-get install libsensors4-dev- libsensors4-dev:aarch64+

Необходимо удалить пакет архитектуры сборки, потому что он не может сосуществовать с одним и тем же именем для другой архитектуры. Однако зависимость libsensors4:aarch64 может сосуществовать с libsensors4 1. Это означает, что вы можете продолжать запускать программы в системе сборки, динамически связанные с libsensors4, но вы не можете использовать libsensors4-dev для привязки к ней новых программ архитектуры сборки.

Я не знаю как вы настроили и установили кросс-компилятор, но GCC обычно выбирает канонические места для файлов заголовков (/usr/include) и файлов библиотек (/usr/lib/<architecture>-<system-type>), которые точно соответствуют тому, где DPKG извлекает их из libsensors4-dev (любая архитектура). Если это не так, вы можете указать GCC / G ++, чтобы добавить каталоги файлов с файлами -I<PATH> и библиотеки с -L<PATH>. Кроме того, вы можете указать текущие каталоги include с каталогами gcc -xc++ -E -v /dev/null и текущей библиотеки с помощью gcc gcc -print-search-dirs.

1 Вы можете проверить, может ли пакет сосуществуют со своим «родным братом» другой архитектуры, если вы посмотрите на поле Multi-Arch в информации управления пакетами. «То же» означает, что он может сосуществовать. Используйте dpkg-query -s <PACKAGE>, apt-cache show <PACKAGE> или dpkg-deb -I <DEB-FILE>, чтобы отобразить информацию управления пакетами. Дополнительные сведения см. В спецификации Multiarch Specification для полей управления бинарным пакетом.

0
ответ дан 18 July 2018 в 15:05

Один из способов получить пакеты aarch64 в системе сборки - включить его в качестве внешней архитектуры:

sudo dpkg --add-architecture aarch64 sudo apt-get update

Теперь вы можете удалить libsensors4-dev для своей архитектуры сборки и установить ее для архитектура хоста aarch64:

sudo apt-get install libsensors4-dev- libsensors4-dev:aarch64+

Необходимо удалить пакет архитектуры сборки, потому что он не может сосуществовать с одним и тем же именем для другой архитектуры. Однако зависимость libsensors4:aarch64 может сосуществовать с libsensors4 1. Это означает, что вы можете продолжать запускать программы в системе сборки, динамически связанные с libsensors4, но вы не можете использовать libsensors4-dev для привязки к ней новых программ архитектуры сборки.

Я не знаю как вы настроили и установили кросс-компилятор, но GCC обычно выбирает канонические места для файлов заголовков (/usr/include) и файлов библиотек (/usr/lib/<architecture>-<system-type>), которые точно соответствуют тому, где DPKG извлекает их из libsensors4-dev (любая архитектура). Если это не так, вы можете указать GCC / G ++, чтобы добавить каталоги файлов с файлами -I<PATH> и библиотеки с -L<PATH>. Кроме того, вы можете указать текущие каталоги include с каталогами gcc -xc++ -E -v /dev/null и текущей библиотеки с помощью gcc gcc -print-search-dirs.

1 Вы можете проверить, может ли пакет сосуществуют со своим «родным братом» другой архитектуры, если вы посмотрите на поле Multi-Arch в информации управления пакетами. «То же» означает, что он может сосуществовать. Используйте dpkg-query -s <PACKAGE>, apt-cache show <PACKAGE> или dpkg-deb -I <DEB-FILE>, чтобы отобразить информацию управления пакетами. Дополнительные сведения см. В спецификации Multiarch Specification для полей управления бинарным пакетом.

0
ответ дан 24 July 2018 в 20:33
  • 1
    Но как 64-битный кросс-компилятор Linaro знает, что на 32-битной хост-машине есть два пакета aarch64 dev? – alien 13 April 2017 в 16:43
  • 2
    Когда вы говорите, что aarch64 может сосуществовать с 32-разрядным арантом, это означает, что я должен сначала установить исходный 32-битный пакет aarch, а затем установить aarch64? если 32-разрядный пакет aarch удаляется, может ли пакет aarch64 использоваться и для 32-битного приложения? – alien 13 April 2017 в 17:22
  • 3
    Спасибо за ввод. Я могу использовать -I (Include) для дополнительного include path для разрешения ошибки файла заголовка. но как кросс-компилятор знает -ensors? Я все еще получил, что не может найти ошибку -lsensors. Я не создавал кросс-компилятор вообще. Я только установил его в каталог (/ opt), и мое приложение использует g ++ из этого каталога / opt для компиляции моего кода для перекрестной компиляции – alien 13 April 2017 в 18:02
  • 4
    Я добавил дополнительную информацию о пути поиска компилятора и компоновщика. – David Foerster 13 April 2017 в 18:16
  • 5
    виноват. На самом деле у меня 64-битный Ubuntu 14.04 Linux с Intel в качестве хост-компьютера, а на целевой машине есть Ubuntu 16.04 Linux с ARM. Нужно ли мне сделать такую ​​же многоэлементную вещь выше, чтобы кросс-компилятор ARM распознал библиотеку -lsensor в / usr / lib 64-битной хост-машины Intel? – alien 13 April 2017 в 20:32

Один из способов получить пакеты aarch64 в системе сборки - включить его в качестве внешней архитектуры:

sudo dpkg --add-architecture aarch64 sudo apt-get update

Теперь вы можете удалить libsensors4-dev для своей архитектуры сборки и установить ее для архитектура хоста aarch64:

sudo apt-get install libsensors4-dev- libsensors4-dev:aarch64+

Необходимо удалить пакет архитектуры сборки, потому что он не может сосуществовать с одним и тем же именем для другой архитектуры. Однако зависимость libsensors4:aarch64 может сосуществовать с libsensors4 1. Это означает, что вы можете продолжать запускать программы в системе сборки, динамически связанные с libsensors4, но вы не можете использовать libsensors4-dev для привязки к ней новых программ архитектуры сборки.

Я не знаю как вы настроили и установили кросс-компилятор, но GCC обычно выбирает канонические места для файлов заголовков (/usr/include) и файлов библиотек (/usr/lib/<architecture>-<system-type>), которые точно соответствуют тому, где DPKG извлекает их из libsensors4-dev (любая архитектура). Если это не так, вы можете указать GCC / G ++, чтобы добавить каталоги файлов с файлами -I<PATH> и библиотеки с -L<PATH>. Кроме того, вы можете указать текущие каталоги include с каталогами gcc -xc++ -E -v /dev/null и текущей библиотеки с помощью gcc gcc -print-search-dirs.

1 Вы можете проверить, может ли пакет сосуществуют со своим «родным братом» другой архитектуры, если вы посмотрите на поле Multi-Arch в информации управления пакетами. «То же» означает, что он может сосуществовать. Используйте dpkg-query -s <PACKAGE>, apt-cache show <PACKAGE> или dpkg-deb -I <DEB-FILE>, чтобы отобразить информацию управления пакетами. Дополнительные сведения см. В спецификации Multiarch Specification для полей управления бинарным пакетом.

0
ответ дан 31 July 2018 в 23:35
  • 1
    Но как 64-битный кросс-компилятор Linaro знает, что на 32-битной хост-машине есть два пакета aarch64 dev? – alien 13 April 2017 в 16:43
  • 2
    Когда вы говорите, что aarch64 может сосуществовать с 32-разрядным арантом, это означает, что я должен сначала установить исходный 32-битный пакет aarch, а затем установить aarch64? если 32-разрядный пакет aarch удаляется, может ли пакет aarch64 использоваться и для 32-битного приложения? – alien 13 April 2017 в 17:22
  • 3
    Спасибо за ввод. Я могу использовать -I (Include) для дополнительного include path для разрешения ошибки файла заголовка. но как кросс-компилятор знает -ensors? Я все еще получил, что не может найти ошибку -lsensors. Я не создавал кросс-компилятор вообще. Я только установил его в каталог (/ opt), и мое приложение использует g ++ из этого каталога / opt для компиляции моего кода для перекрестной компиляции – alien 13 April 2017 в 18:02
  • 4
    Я добавил дополнительную информацию о пути поиска компилятора и компоновщика. – David Foerster 13 April 2017 в 18:16
  • 5
    виноват. На самом деле у меня 64-битный Ubuntu 14.04 Linux с Intel в качестве хост-компьютера, а на целевой машине есть Ubuntu 16.04 Linux с ARM. Нужно ли мне сделать такую ​​же многоэлементную вещь выше, чтобы кросс-компилятор ARM распознал библиотеку -lsensor в / usr / lib 64-битной хост-машины Intel? – alien 13 April 2017 в 20:32

Один из способов получить пакеты aarch64 в системе сборки - включить его в качестве внешней архитектуры:

sudo dpkg --add-architecture aarch64
sudo apt-get update

Теперь вы можете удалить libsensors4-dev для своей архитектуры сборки и установить ее для архитектура хоста aarch64:

sudo apt-get install libsensors4-dev- libsensors4-dev:aarch64+

Необходимо удалить пакет архитектуры сборки, потому что он не может сосуществовать с одним и тем же именем для другой архитектуры. Однако зависимость libsensors4:aarch64 может сосуществовать с libsensors4 1. Это означает, что вы можете продолжать запускать программы в системе сборки, динамически связанные с libsensors4, но вы не можете использовать libsensors4-dev для ссылки на новые архитектуры архитектуры сборки против него.

Я не знаю, как вы настроили и установили кросс-компилятор, но GCC обычно выбирает канонические места для файлов заголовков (/usr/include) и файлов библиотек (/usr/lib/<architecture>-<system-type>), которые точно соответствуют тому, где DPKG извлекает их из libsensors4-dev (любая архитектура). Если это не так, вы можете указать GCC / G ++, чтобы добавить каталоги файлов с файлами -I<PATH> и библиотеки с -L<PATH>. Кроме того, вы можете перечислить текущие каталоги include с каталогами gcc -xc++ -E -v /dev/null и текущей библиотеки с помощью gcc gcc -print-search-dirs.


1 Вы можете проверить, может ли пакет сосуществовать со своим «родным братом» другой архитектуры, если вы смотрите поле Multi-Arch в информации управления пакетами. «То же» означает, что он может сосуществовать. Используйте dpkg-query -s <PACKAGE>, apt-cache show <PACKAGE> или dpkg-deb -I <DEB-FILE>, чтобы отобразить информацию управления пакетами. Более подробную информацию см. В спецификации Multiarch Specification для полей управления бинарным пакетом .

0
ответ дан 3 August 2018 в 20:50

Один из способов получить пакеты aarch64 в системе сборки - включить его в качестве внешней архитектуры:

sudo dpkg --add-architecture aarch64
sudo apt-get update

Теперь вы можете удалить libsensors4-dev для своей архитектуры сборки и установить ее для архитектура хоста aarch64:

sudo apt-get install libsensors4-dev- libsensors4-dev:aarch64+

Необходимо удалить пакет архитектуры сборки, потому что он не может сосуществовать с одним и тем же именем для другой архитектуры. Однако зависимость libsensors4:aarch64 может сосуществовать с libsensors4 1. Это означает, что вы можете продолжать запускать программы в системе сборки, динамически связанные с libsensors4, но вы не можете использовать libsensors4-dev для ссылки на новые архитектуры архитектуры сборки против него.

Я не знаю, как вы настроили и установили кросс-компилятор, но GCC обычно выбирает канонические места для файлов заголовков (/usr/include) и файлов библиотек (/usr/lib/<architecture>-<system-type>), которые точно соответствуют тому, где DPKG извлекает их из libsensors4-dev (любая архитектура). Если это не так, вы можете указать GCC / G ++, чтобы добавить каталоги файлов с файлами -I<PATH> и библиотеки с -L<PATH>. Кроме того, вы можете перечислить текущие каталоги include с каталогами gcc -xc++ -E -v /dev/null и текущей библиотеки с помощью gcc gcc -print-search-dirs.


1 Вы можете проверить, может ли пакет сосуществовать со своим «родным братом» другой архитектуры, если вы смотрите поле Multi-Arch в информации управления пакетами. «То же» означает, что он может сосуществовать. Используйте dpkg-query -s <PACKAGE>, apt-cache show <PACKAGE> или dpkg-deb -I <DEB-FILE>, чтобы отобразить информацию управления пакетами. Более подробную информацию см. В спецификации Multiarch Specification для полей управления бинарным пакетом .

0
ответ дан 5 August 2018 в 05:30

Один из способов получить пакеты aarch64 в системе сборки - включить его в качестве внешней архитектуры:

sudo dpkg --add-architecture aarch64
sudo apt-get update

Теперь вы можете удалить libsensors4-dev для своей архитектуры сборки и установить ее для архитектура хоста aarch64:

sudo apt-get install libsensors4-dev- libsensors4-dev:aarch64+

Необходимо удалить пакет архитектуры сборки, потому что он не может сосуществовать с одним и тем же именем для другой архитектуры. Однако зависимость libsensors4:aarch64 может сосуществовать с libsensors4 1. Это означает, что вы можете продолжать запускать программы в системе сборки, динамически связанные с libsensors4, но вы не можете использовать libsensors4-dev для ссылки на новые архитектуры архитектуры сборки против него.

Я не знаю, как вы настроили и установили кросс-компилятор, но GCC обычно выбирает канонические места для файлов заголовков (/usr/include) и файлов библиотек (/usr/lib/<architecture>-<system-type>), которые точно соответствуют тому, где DPKG извлекает их из libsensors4-dev (любая архитектура). Если это не так, вы можете указать GCC / G ++, чтобы добавить каталоги файлов с файлами -I<PATH> и библиотеки с -L<PATH>. Кроме того, вы можете перечислить текущие каталоги include с каталогами gcc -xc++ -E -v /dev/null и текущей библиотеки с помощью gcc gcc -print-search-dirs.


1 Вы можете проверить, может ли пакет сосуществовать со своим «родным братом» другой архитектуры, если вы смотрите поле Multi-Arch в информации управления пакетами. «То же» означает, что он может сосуществовать. Используйте dpkg-query -s <PACKAGE>, apt-cache show <PACKAGE> или dpkg-deb -I <DEB-FILE>, чтобы отобразить информацию управления пакетами. Более подробную информацию см. В спецификации Multiarch Specification для полей управления бинарным пакетом .

0
ответ дан 9 August 2018 в 03:03

Один из способов получить пакеты aarch64 в системе сборки - включить его в качестве внешней архитектуры:

sudo dpkg --add-architecture aarch64
sudo apt-get update

Теперь вы можете удалить libsensors4-dev для своей архитектуры сборки и установить ее для архитектура хоста aarch64:

sudo apt-get install libsensors4-dev- libsensors4-dev:aarch64+

Необходимо удалить пакет архитектуры сборки, потому что он не может сосуществовать с одним и тем же именем для другой архитектуры. Однако зависимость libsensors4:aarch64 может сосуществовать с libsensors4 1. Это означает, что вы можете продолжать запускать программы в системе сборки, динамически связанные с libsensors4, но вы не можете использовать libsensors4-dev для ссылки на новые архитектуры архитектуры сборки против него.

Я не знаю, как вы настроили и установили кросс-компилятор, но GCC обычно выбирает канонические места для файлов заголовков (/usr/include) и файлов библиотек (/usr/lib/<architecture>-<system-type>), которые точно соответствуют тому, где DPKG извлекает их из libsensors4-dev (любая архитектура). Если это не так, вы можете указать GCC / G ++, чтобы добавить каталоги файлов с файлами -I<PATH> и библиотеки с -L<PATH>. Кроме того, вы можете перечислить текущие каталоги include с каталогами gcc -xc++ -E -v /dev/null и текущей библиотеки с помощью gcc gcc -print-search-dirs.


1 Вы можете проверить, может ли пакет сосуществовать со своим «родным братом» другой архитектуры, если вы смотрите поле Multi-Arch в информации управления пакетами. «То же» означает, что он может сосуществовать. Используйте dpkg-query -s <PACKAGE>, apt-cache show <PACKAGE> или dpkg-deb -I <DEB-FILE>, чтобы отобразить информацию управления пакетами. Более подробную информацию см. В спецификации Multiarch Specification для полей управления бинарным пакетом .

0
ответ дан 14 August 2018 в 21:21
  • 1
    Но как 64-битный кросс-компилятор Linaro знает, что на 32-битной хост-машине есть два пакета aarch64 dev? – alien 13 April 2017 в 16:43
  • 2
    Когда вы говорите, что aarch64 может сосуществовать с 32-разрядным арантом, это означает, что я должен сначала установить исходный 32-битный пакет aarch, а затем установить aarch64? если 32-разрядный пакет aarch удаляется, может ли пакет aarch64 использоваться и для 32-битного приложения? – alien 13 April 2017 в 17:22
  • 3
    Спасибо за ввод. Я могу использовать -I (Include) для дополнительного include path для разрешения ошибки файла заголовка. но как кросс-компилятор знает -ensors? Я все еще получил, что не может найти ошибку -lsensors. Я не создавал кросс-компилятор вообще. Я только установил его в каталог (/ opt), и мое приложение использует g ++ из этого каталога / opt для компиляции моего кода для перекрестной компиляции – alien 13 April 2017 в 18:02
  • 4
    Я добавил дополнительную информацию о пути поиска компилятора и компоновщика. – David Foerster 13 April 2017 в 18:16
  • 5
    виноват. На самом деле у меня 64-битный Ubuntu 14.04 Linux с Intel в качестве хост-компьютера, а на целевой машине есть Ubuntu 16.04 Linux с ARM. Нужно ли мне сделать такую ​​же многоэлементную вещь выше, чтобы кросс-компилятор ARM распознал библиотеку -lsensor в / usr / lib 64-битной хост-машины Intel? – alien 13 April 2017 в 20:32

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

Похожие вопросы: