Перекрестная компиляция библиотеки от intel до arm - PullRequest
2 голосов
/ 29 апреля 2011

Я использую библиотеку DCMTK с открытым исходным кодом C ++ из http://dicom.offis.de/dcmtk.php.en. Я успешно скомпилировал эту библиотеку в Windows, используя VC ++ IDE, MacOS Xcode, симулятор Mac iOS.Но я не могу скомпилировать эту библиотеку на устройстве iOS, поскольку она основана на архитектуре ARM.Библиотека DCMTK очень хорошо скомпилирована на архитектуре Intel.

Теперь моя проблема: -

Мне нужно скомпилировать эту библиотеку DCMTK C ++ для архитектуры ARM путем кросс-компиляции.Я использую 64-битную машину Ubuntu для кросс-компиляции.Я установил двоичные файлы из цепочки инструментов GNU ARM из http://www.gnuarm.com/ Я использую GCC toolchain 4.0 binutils-2.16.1, gcc-4.0.2-c-c ++, newlib-1.14.0, insight-6.4, TAR BZ2[65.5MB] двоичные файлы для 64-битной машины Ubuntu для кросс-компиляции ARM.

После установки этих двоичных файлов в Ubuntu я установил переменную среды PATH равной PATH = $ PATH / gnu_arm / bin

Для настройкибиблиотека DCMTK C ++ Я выполнил следующую команду в оболочке

CC = arm-elf-gcc CXX = arm-elf-g ++ AR = arm-elf-ar RANLIB = arm-elf-ranlib ARFLAGS = cruv./ configure –prefix = $ home_dicom –target = arm-elf –host = arm-elf –enable-std-includes –disable-threads

Правильно создает файл make.Сейчас я пытаюсь скомпилировать код с помощью команды make, но сталкиваюсь с таким количеством ошибок компиляции, как: - 1) Я пытался скомпилировать свою первую зависимую библиотеку C ++, которая имеет тип ststd.Я получил ошибку для вызовов DIR *, struct dirent, opendir (), closedir ().Он включает в себя эти вызовы, но я не нашел никаких определений для вышеуказанных вызовов в этом заголовочном файле.

2) Когда я компилировал другую библиотеку oflog, я получил следующие ошибки, такие как error: nthos не был объявлен в этомошибка области: ntohl не был объявлен в этой ошибке области: htons не был объявлен в этой ошибке области: htonl не был объявлен в этой области.Эти вызовы являются сетевыми вызовами и не определены ни в одном из заголовочных файлов из инструмента GNU ARM.

Я попытался загрузить исходные файлы двоичных файлов ARM, извлек файлы tar и попытаться скопировать отсутствующие файлы заголовков в установленный GNU.ARM на Ubuntu.Для некоторых файлов он компилируется после внесения изменений в скопированные заголовочные файлы, а для некоторых снова выдает ошибки компиляции. Для каждого файла, присутствующего в библиотеке DCMTK, существует цикл ошибок компиляции, поскольку некоторые стандартные заголовочные файлы отсутствуют.

Пожалуйста, предложите, если есть какая-либо другая цепочка инструментов, доступная для кросс-компиляции ARM на 64-битной машине Ubuntu.Или любое другое хорошее решение, кроме этого.

Спасибо !!!Amit

Ответы [ 2 ]

1 голос
/ 16 мая 2011

Есть много областей для проблем, когда дело доходит до кросс-компиляции. Есть три основных флага для кросс-компиляции. -host, -target и -build. Вспышка -host - это машина, на которой будут работать полученные двоичные файлы. -Build flash - это система, в которой вы будете компилировать. Флаг -target предназначен для сборки библиотек, которые будут использоваться при кросс-компиляции. Так что, если вы хотите построить свою собственную цепочку инструментов gcc. Так что в вашем случае вы не будете устанавливать целевой флаг, так как мы не строим цепочку инструментов. флаг -host будет армейским. И флаг -build будет amd64.

0 голосов
/ 16 мая 2011

Обычно кросс-компиляция заканчивается неудачей, если есть несоответствия между обычным компилятором c и кросс-компилятором.Я скомпилировал несколько библиотек для avr32 с помощью цепочки инструментов, созданной buildroot, но в некоторых случаях (например, проект socat) это было невозможно.

Ваш хост, ваша цель и флаги CXX выглядят нормально.Я думаю, что нет необходимости ставить флаг AR (это идея с опцией host и target).

С другой стороны, это пример библиотек экспатов для avr32:

./configure --host=avr32-linux --prefix=/home/juan/builds/build_expat/ CC=avr32-linux-gcc
make; make install 

Я могу порекомендовать вам попробовать кросс-компиляцию из архитектуры ia32.В прошлом у меня было несколько проблем с этой убунту.

...