подпись

Кросс-компиляция под ARM — Midnight Commander

Тема кросс-компиляции несомненно важная. В процессе работы над различными проектами, вполне возможно, что появится необходимость в компиляции программы под различные архитектуры без прямого доступа к устройствам на нужной архитектуре. Самый обычный пример — скомпилировать файловый менеджер для машинки Raspberry Pi, но делать это непосредственно на «пироге» затея, предполагающая потратить кучу времени на ожидание (не учитывая различные проблемы и ошибки, которые, уж поверьте, будут).

Поэтому я посвящу пару записей на данную тему, поскольку подобные задачи недавно возникали у меня, с которыми мне все-таки удалось справится. И мне бы хотелось поделится полученным опытом с общественностью.

Собственно, какая задача, какие исходные данные, какие средства. Задача — скомпилировать  известный файловый менеджер Midnight Commander (mc) под систему с архитектурой ARM. В наших руках компьютер с процессором Intel, с операционной системой Ubuntu 14.04. В качестве компилятора будем использовать пакет gcc-4.7-arm-linux-gnueabi, который отлично пребывает на репозиториях. Исходный материал — исходные коды необходимых библиотек и код самого mc.

Сперва начнем с простого — установка инструментов для кросс-компиляции. Происходит все это очень просто:

# apt-get install gcc-4.7-arm-linux-gnueabi
# apt-get install gcc-arm-linux-gnueabi
Это дело работает как gcc, вызывать компилятор можно так: arm-linux-gnueabi-gcc. Все возможности смотрите тут: man arm-linux-gnueabi-gcc.

Шаг 2 — загружаем исходники. На потребуются следующие исходники:

  • mc-4.8.14
  • check-0.10.0
  • libffi-3.2.1
  • zlib-1.2.8
  • glib-2.44.1
  • ncurses-5.9

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

Шаг 3 — подготовка к кросс-компиляции. Сейчас нам необходимо подготовить скаченные исходники к компиляции. Но сначала один нюанс — мне так и не удалось скомпилировать mc с относительными путями. Кто не в курсе, проблема вот в чем — при компиляции определенных библиотек, им необходимо указывать пути до уже скомпилированных зависимых библиотек. Собственно, при компиляции самого mc нужно скармливать ему вышеприведенные либы. Указав полные пути (а конфигурационные скрипты почему то требуют указывать именно абсолютные пути), ваш mc запустится только по таким путям файловой системы, в которых все было скомпилированно. Например, если вы решили все собрать тут: /home/username/arm_mc, то ваша программа на другом компьютере запустится лишь только в  /home/username/arm_mc, при условии что все зависимые библиотеки также находятся в тех местах, на которые указывалось при кросс-компиляции. Это проблема, которую я не смог решить, буду очень благодарен, если кто либо расскажет, как правильно это сделать.

Поэтому для нашего случая мы воспользуемся самым простым вариантом: все компилировать будем сюда  /tmp/mc_build/builds, и запускать все будем также по тому пути (если вы решились делать так, то не забывайте особенность каталога tmp — после перезагрузки системы, данный каталог чистится).

Поэтому делаем следующее:

$ mkdir /tmp/mc_build

$ mkdir /tmp/mc_build/builds

$ mkdir /tmp/mc_build/sources

В каталог /tmp/mc_build/sources кладем наш архив mc_src.tar.gz и выполняем разархивацию в данный каталог содержимого всех архивов руками, либо так (перед выполнением сначала перейдите в каталог с архивом):

$ tar -xf mc_src.tar.gz && for f in *.tar*; do tar xf $f; done

Шаг 4 — компиляция. Процесс компиляции на самом деле очень прост, за нас, по сути, разработчики уже позаботились, создали скрипты конфигурации и make-файлы, которые всю грязную работу выполняют сами. От нас лишь требуется правильно предоставить требуемые зависимости и скормить скриптам нужные флаги и параметры. Как это делать будем мы: необходимо будет создавать исполняемый bash-скрипт в корне каталога компилируемой библиотеки, прописывать в данный скрипт нужные команды и выполнять этот скрипт. Собственно, займемся данным, достаточно рутинным, процессом. Для первой библиотеки я распишу полную последовательность команд, для оставшихся я приведу лишь тексты bash-скриптов.

Компиляция check-0.10.0:

Создаем файл скрипта в корне:

$ touch /tmp/mc_build/sources/check-0.10.0/my_make

Открываем его любым текстовым редактором, например:

$ nano /tmp/mc_build/sources/check-0.10.0/my_make

Копируем в этот файл следующий текст:

Даем данному скрипту права на выполнение:

$ chmod 755 /tmp/mc_build/sources/check-0.10.0/my_make

И выполняем данный скрипт:

$ cd /tmp/mc_build/sources/check-0.10.0
$ ./my_make

В случае успешного завершения процесса компиляции, в каталоге /tmp/mc_build/builds/ будет лежать каталог build_check-0.10.0 — это продукт нашей компиляции. В случае если такого каталога нету, либо он пустой — произошла ошибка, необходимо читать что нам в консоли сообщает make, либо скрипт configure и пытаться исправить. Для справки, где есть полезная информация, можно выполнить следующее:

$ /tmp/mc_build/sources/check-0.10.0/configure —help

Таким же образом происходит компиляция всего остального (копируете скрипт my_make, даете ему права на исполнение, запускаете, надеетесь, чтобы не было ошибок). Поэтому далее я лишь приведу скрипты my_make для каждой библиотеки. Компилировать, кстати, библиотеки нужно в том порядке, в котором я привожу тексты скриптов.

Компиляция libffi-3.2.1:

Компиляция zlib-1.2.8:
UPD: У некоторых при использовании данного скрипта для компиляции zlib появляются ошибки вроде:

Логи configure.log говорят, что, почему то, arm-linux-gnueabi-gcc не понимает строку

в данном скрипте. Поэтому решение — убрать (закомментировать) эту строчку из нижеприведенного скрипта.

Компиляция ncurses-5.9:

Компиляция glib-2.44.1:
UPD: как справедливо заметили в комментариях, в процессе сборки могут появиться ошибки о проблемах с glib-genmarshal. Предложенный вариант решения — установка пакета:
# sudo apt-get install libglib2.0-dev
Должно заработать.

Компиляция mc-4.8.14:

В случае, если у вас после все выше проделанного появилась папочка /tmp/mc_build/builds/build_mc-4.8.14 — поздравляю, у вас, наверно, удалась кросс-компиляция файлового менеджера Midnight Commander под архитектуру ARM.

Далее действия просты — загружаем каталог /tmp/mc_build/builds на нужную систему по одноименному пути, и запускаем mc: /tmp/mc_build/builds/build_mc-4.8.14/bin/mc. Все должно работать.

build_mc

Для знатоков — в данном примере в качестве графической библиотеки использовалась библиотека ncurses, поскольку это попроще в плане сборки. Есть вариант использовать библиотеку slang (для данного примера версии 2.3.0), но это более сложная задача, поскольку slang имеет слегка больше зависимостей. Можете попробовать, у меня пока не получилось.

Всем спасибо, ставьте лайки, подписывайтесь на мой канал, всем пока!

Архив со всеми исходниками: ССЫЛКА

22 thoughts on “Кросс-компиляция под ARM — Midnight Commander

  1. Замечательная статья дружище. Добавь пожалуйста что кроме установки gcc-4.7-arm-linux-gnueabi нужно еще установить arm-linux-gnueabi-gcc. А при сборке glib-2.44.1 нужно установить libglib2.0-dev иначе выдает ошибку и останов.

  2. И еще. C ncurses проблемы — не компилится то не может найти заголовки то libs. Компилировал без него. Еще. Он не компилируется без библиотек slang. Нужно собирать и ее.

    • Спасибо за полезный комментарий!
      Да, действительно, для корректной компиляции библиотек необходим еще пакет gcc-arm-linux-gnueabi. А для сборки glib может потребоваться библиотека libglib2.0-dev. Добавил изменения в статью.
      Но вот на счет ncurses и slang — это две взаимозаменяемые графические библиотеки для mc. Поэтому одна не требует наличия другой. По умолчанию, mc компилируется с slang, но в данной статье использовалась библиотека ncruses. По функционалу для mc они практически не отличаются, поэтому с какой быстрее и удобнее собирать, ту и стоит выбрать. Если с ncurses не получается, то можно попробовать собрать с slang, но это чуть сложнее, поскольку у нее больше зависимостей.

      • Я видимо несколько сумбурно написал. Но Вы поняли мою мысль. Только что собрал mc с ncurses. Дело все в том, что у меня стояла задача скомпилировать mc под nas seagate central. Там немного хитрый arm-процессор поэтому обычно скомпилированный mc просто не запустится. Ваша статья очень помогла с основными моментами, спасибо. Я написал свою статью, естественно со ссылкой на Вашу, в которой указал дополнительные флаги, необходимые для правильной компиляции под тот процессор. Cсылку на нее я не привожу дабы не загаживать Вам ссылочную массу.

  3. Здравствуйте. Подскажите новичку. Как Вы определяете что еще потребуется компилировать для нужной вам программы. Ну, почему для mc потребуются еще пять исходников?

    • Здравствуйте!
      Ну первое, что следует читать перед компиляцией — это файл README, который должен находиться в корне исходников любой крупной программы. То есть обращаться к первоисточнику. Обычно (но не всегда) разработчики в данном файле описывают все основные моменты, которые должны знать пользователи. Например, в случае mc, в файле README в разделе Dependencies (зависимости) написано, что вся информация про установку mc находится в файле INSTALL — а там уже все подробно описано, какие библиотеки нужны для сборки данной версии программы.
      Второй вариант, менее правильный — начать сборку программы сразу без чтения документации. Это работает только с крупными и известными программами с хорошими скриптами сборки. Потому что при сборке без нужных библиотек (обычно при запуске скрипта configure) в терминал будет выведена ошибка с наименованием библиотеки, которая требуется. Так, библиотеку за библиотекой по очереди добавлять, пока ошибки перестанут приходить.
      Ну и третий вариант — воспользоваться Интернетом. В сети, особенно в англоязычном сегменте, наверняка имеются полные списки зависимостей для большинства крупных программ.
      Данных трех вариантов мне всегда хватало для успешной компиляции большинства программ.

  4. Спасибо.
    А что вот эти три строчки означают
    #!/bin/bash
    ARCH=arm \
    CC=arm-linux-gnueabi-gcc ./configure \
    Почему нельзя просто ввести
    ~$ arm-linux-gnueabi-gcc (имя файла исходника) -o(имя исполнительного файла)

    Извините за глупые вопросы, я с линуксом раньше дело не имел

  5. Кажется понял. Скрипт Configure есть в каждой папке, и он является аргументом для компилятора

    А вот что задает
    #!/bin/bash
    ARCH=arm
    Это должна быть папка с архивом /arm ?

    • Да, скрипт configure присутствует во всех программах, которые используют утилиту Autoconf для сборки проекта.
      В данной статье я предлагаю проводить сборку midnight commander с использованием своих собственных bash-скриптов. А в bash-скриптах первой строкой обязательно нужно обозначать путь в системе к bash-интерпретатору, который и выглядит обычно таким образом: #!/bin/bash.
      Флагом ARCH обозначается архитектура, под которую производится кросс-компиляция. В данной статье производилась кросс-компиляция для процессоров arm.

  6. И еще, насколько я помню, раньше были отдельно компилятор и отдельно линковщик. Сейчас все в одном?

    Далее. Фраза: «Создаем файл скрипта в коре:»
    Что такое коре, это специальный текстовый редактор?

    • Не совсем понимаю вопрос, что имеется в виду под «отдельно компилятор и линковщик»? Они до сих пор раздельны в этапах сборки программы и имеется возможность отдельно вызывать их по очереди. Это и происходит при сборке программы с помощью утилиты make, которую мы вызываем в скриптах в статье.

      А на счет фразы — это была опечатка =) Имелось в виду, что необходимо создать пустой файл в корне каталога /tmp/mc_build/sources/check-0.10.0/my_make. Спасибо, что указали на опечатку!

  7. Большое спасибо за ответы.
    Это я по системе DOS помню что сначала компилировали, получали объектный файл, а потом выполняли link который был в комплекте компилятора и получали уже исполняемый файл. Тут видно уже эти операции совместили.
    Я просто пытаюсь скомпилировать mc для платформы powerpc, вот и корректирую для него файлы makefile. Компилятор у него свой powerpc-e300c3-linux, на Hello words я его проверил, работает

    • Так же происходит и в Linux с использованием gcc — сначала все компилируется, преобразовываясь в объектные файлы, а далее все это собирается компоновщиком/линковщиком в исполняемый файл. Просто в данном случае используется специальная утилита make, которая сама за разработчика выполняет эти действия. Разработчик лишь настраивает её работу, указывая какие модули программного проекта необходимо компилировать. А в случае mc еще используется утилита Autoconf, которая создает конфигурационные скрипты (configure) под платформу и потом сама генерирует эти самые файлы — makefile, для которых достаточно вызвать make.

  8. Все пытаюсь скомпилировать check-0.10.0
    Подскажите, что я делаю не так?

    my_make

    #!/bin/bash
    ARCH=ppc \
    CC=powerpc-e300c3-linux-gcc-4.0.2 ./configure \
    —host=powerpc-e300c3-linux \
    —prefix=/home/mc_builds/build_check-0.10.0/ \
    —enable-static=yes
    make
    sudo make install

    config.log

    This file contains any messages produced by compilers while
    running configure, to aid debugging if configure makes a mistake.

    It was created by Check configure 0.10.0, which was
    generated by GNU Autoconf 2.68. Invocation command line was

    $ ./configure —host=powerpc-e300c3-linux —prefix=/home/mc_builds/build_check-0.10.0/ —enable-static=yes

    ## ——— ##
    ## Platform. ##
    ## ——— ##

    hostname = Linux90
    uname -m = i686
    uname -r = 2.4.20-8
    uname -s = Linux
    uname -v = #1 Thu Mar 13 17:54:28 EST 2003

    /usr/bin/uname -p = unknown
    /bin/uname -X = unknown

    /bin/arch = i686
    /usr/bin/arch -k = unknown
    /usr/convex/getsysinfo = unknown
    /usr/bin/hostinfo = unknown
    /bin/machine = unknown
    /usr/bin/oslevel = unknown
    /bin/universe = unknown

    PATH: /usr/local/sbin
    PATH: /usr/local/bin
    PATH: /sbin
    PATH: /bin
    PATH: /usr/sbin
    PATH: /usr/bin
    PATH: /opt/wisermind_MPS83xx/
    PATH: /usr/X11R6/bin
    PATH: /root/bin

    ## ———— ##
    ## Core tests. ##
    ## ———— ##

    configure:2707: checking for a BSD-compatible install
    configure:2775: result: /usr/bin/install -c
    configure:2786: checking whether build environment is sane
    configure:2836: result: yes
    configure:2885: checking for powerpc-e300c3-linux-strip
    configure:2915: result: no
    configure:2925: checking for strip
    configure:2941: found /usr/bin/strip
    configure:2952: result: strip
    configure:2977: checking for a thread-safe mkdir -p
    configure:3016: result: /bin/mkdir -p
    configure:3029: checking for gawk
    configure:3045: found /bin/gawk
    configure:3056: result: gawk
    configure:3067: checking whether make sets $(MAKE)
    configure:3089: result: yes
    configure:3186: checking for style of include used by make
    configure:3214: result: GNU
    configure:3245: checking for powerpc-e300c3-linux-gcc
    configure:3272: result: powerpc-e300c3-linux-gcc-4.0.2
    configure:3541: checking for C compiler version
    configure:3550: powerpc-e300c3-linux-gcc-4.0.2 —version >&5
    ./configure: line 1: powerpc-e300c3-linux-gcc-4.0.2: command not found
    configure:3561: $? = 127
    configure:3550: powerpc-e300c3-linux-gcc-4.0.2 -v >&5
    ./configure: line 1: powerpc-e300c3-linux-gcc-4.0.2: command not found
    configure:3561: $? = 127
    configure:3550: powerpc-e300c3-linux-gcc-4.0.2 -V >&5
    ./configure: line 1: powerpc-e300c3-linux-gcc-4.0.2: command not found
    configure:3561: $? = 127
    configure:3550: powerpc-e300c3-linux-gcc-4.0.2 -qversion >&5
    ./configure: line 1: powerpc-e300c3-linux-gcc-4.0.2: command not found
    configure:3561: $? = 127
    configure:3581: checking whether the C compiler works
    configure:3603: powerpc-e300c3-linux-gcc-4.0.2 conftest.c >&5
    ./configure: line 1: powerpc-e300c3-linux-gcc-4.0.2: command not found
    configure:3607: $? = 127
    configure:3645: result: no
    configure: failed program was:
    | /* confdefs.h */
    | #define PACKAGE_NAME «Check»
    | #define PACKAGE_TARNAME «check»
    | #define PACKAGE_VERSION «0.10.0»
    | #define PACKAGE_STRING «Check 0.10.0″
    | #define PACKAGE_BUGREPORT «check-devel at lists dot sourceforge dot net»
    | #define PACKAGE_URL «»
    | #define PACKAGE «check»
    | #define VERSION «0.10.0»
    | /* end confdefs.h. */
    |
    | int
    | main ()
    | {
    |
    | ;
    | return 0;
    | }
    configure:3650: error: in /home/mc_build/sources/check-0.10.0':
    configure:3652: error: C compiler cannot create executables
    See
    config.log’ for more details

    ## —————- ##
    ## Cache variables. ##
    ## —————- ##

    ac_cv_env_AWK_PATH_set=
    ac_cv_env_AWK_PATH_value=
    ac_cv_env_CC_set=set
    ac_cv_env_CC_value=powerpc-e300c3-linux-gcc-4.0.2
    ac_cv_env_CFLAGS_set=
    ac_cv_env_CFLAGS_value=
    ac_cv_env_CPPFLAGS_set=
    ac_cv_env_CPPFLAGS_value=
    ac_cv_env_CPP_set=
    ac_cv_env_CPP_value=
    ac_cv_env_LDFLAGS_set=
    ac_cv_env_LDFLAGS_value=
    ac_cv_env_LIBSUBUNIT_CFLAGS_set=
    ac_cv_env_LIBSUBUNIT_CFLAGS_value=
    ac_cv_env_LIBSUBUNIT_LIBS_set=
    ac_cv_env_LIBSUBUNIT_LIBS_value=
    ac_cv_env_LIBS_set=
    ac_cv_env_LIBS_value=
    ac_cv_env_PKG_CONFIG_LIBDIR_set=
    ac_cv_env_PKG_CONFIG_LIBDIR_value=
    ac_cv_env_PKG_CONFIG_PATH_set=
    ac_cv_env_PKG_CONFIG_PATH_value=
    ac_cv_env_PKG_CONFIG_set=
    ac_cv_env_PKG_CONFIG_value=
    ac_cv_env_build_alias_set=
    ac_cv_env_build_alias_value=
    ac_cv_env_host_alias_set=set
    ac_cv_env_host_alias_value=powerpc-e300c3-linux
    ac_cv_env_target_alias_set=
    ac_cv_env_target_alias_value=
    ac_cv_path_install=’/usr/bin/install -c’
    ac_cv_path_mkdir=/bin/mkdir
    ac_cv_prog_AWK=gawk
    ac_cv_prog_CC=powerpc-e300c3-linux-gcc-4.0.2
    ac_cv_prog_ac_ct_STRIP=strip
    ac_cv_prog_make_make_set=yes

    ## —————— ##
    ## Output variables. ##
    ## —————— ##

    ACLOCAL=’${SHELL} /home/mc_build/sources/check-0.10.0/build-aux/missing —run aclocal-1.11′
    AMDEPBACKSLASH=’\’
    AMDEP_FALSE=’#’
    AMDEP_TRUE=»
    AMTAR=’$${TAR-tar}’
    AM_BACKSLASH=»
    AM_DEFAULT_V=»
    AM_DEFAULT_VERBOSITY=»
    AM_V=»
    AR=»
    AUTOCONF=’${SHELL} /home/mc_build/sources/check-0.10.0/build-aux/missing —run autoconf’
    AUTOHEADER=’${SHELL} /home/mc_build/sources/check-0.10.0/build-aux/missing —run autoheader’
    AUTOMAKE=’${SHELL} /home/mc_build/sources/check-0.10.0/build-aux/missing —run automake-1.11′
    AWK=’gawk’
    AWK_GSUB_DBL_BSLASH=»
    AWK_PATH=»
    CC=’powerpc-e300c3-linux-gcc-4.0.2′
    CCDEPMODE=»
    CFLAGS=»
    CHECK_MAJOR_VERSION=’0′
    CHECK_MICRO_VERSION=’0′
    CHECK_MINOR_VERSION=’10’
    CHECK_VERSION=’0.10.0′
    CPP=»
    CPPFLAGS=»
    CYGPATH_W=’echo’
    DEFS=»
    DEPDIR=’.deps’
    DLLTOOL=»
    DSYMUTIL=»
    DUMPBIN=»
    ECHO_C=»
    ECHO_N=’-n’
    ECHO_T=»
    EGREP=»
    ENABLE_GCOV_FALSE=»
    ENABLE_GCOV_TRUE=»
    ENABLE_SUBUNIT=»
    EXEEXT=»
    FGREP=»
    GCOV=»
    GCOV_CFLAGS=»
    GCOV_LIBS=»
    GENHTML=»
    GREP=»
    HAVE_FORK=»
    INSTALL_CHECKMK_FALSE=»
    INSTALL_CHECKMK_TRUE=»
    INSTALL_DATA=’${INSTALL} -m 644′
    INSTALL_PROGRAM=’${INSTALL}’
    INSTALL_SCRIPT=’${INSTALL}’
    INSTALL_STRIP_PROGRAM=’$(install_sh) -c -s’
    LCOV=»
    LD=»
    LDFLAGS=»
    LIBOBJS=»
    LIBS=»
    LIBSUBUNIT_CFLAGS=»
    LIBSUBUNIT_LIBS=»
    LIBSUBUNIT_PC=»
    LIBTOOL=»
    LIPO=»
    LN_S=»
    LTLIBOBJS=»
    MAKEINFO=’${SHELL} /home/mc_build/sources/check-0.10.0/build-aux/missing —run makeinfo’
    MANIFEST_TOOL=»
    MKDIR_P=’/bin/mkdir -p’
    NM=»
    NMEDIT=»
    NO_TIMEOUT_TESTS_FALSE=»
    NO_TIMEOUT_TESTS_TRUE=»
    OBJDUMP=»
    OBJEXT=»
    OTOOL64=»
    OTOOL=»
    PACKAGE=’check’
    PACKAGE_BUGREPORT=’check-devel at lists dot sourceforge dot net’
    PACKAGE_NAME=’Check’
    PACKAGE_STRING=’Check 0.10.0′
    PACKAGE_TARNAME=’check’
    PACKAGE_URL=»
    PACKAGE_VERSION=’0.10.0′
    PATH_SEPARATOR=':’
    PKG_CONFIG=»
    PKG_CONFIG_LIBDIR=»
    PKG_CONFIG_PATH=»
    PTHREAD_CC=»
    PTHREAD_CFLAGS=»
    PTHREAD_LIBS=»
    RANLIB=»
    SED=»
    SET_MAKE=»
    SHELL=’/bin/sh’
    STRIP=’strip’
    SUBUNIT_FALSE=»
    SUBUNIT_TRUE=»
    TEX=»
    VERSION=’0.10.0′
    ac_ct_AR=»
    ac_ct_CC=»
    ac_ct_DUMPBIN=»
    acx_pthread_config=»
    am__EXEEXT_FALSE=»
    am__EXEEXT_TRUE=»
    am__fastdepCC_FALSE=»
    am__fastdepCC_TRUE=»
    am__include=’include’
    am__isrc=»
    am__leading_dot=’.’
    am__nodep=’_no’
    am__quote=»
    am__tar=’$${TAR-tar} chof — «$$tardir»‘
    am__untar=’$${TAR-tar} xf -‘
    bindir=’${exec_prefix}/bin’
    build=»
    build_alias=»
    build_cpu=»
    build_os=»
    build_vendor=»
    datadir=’${datarootdir}’
    datarootdir=’${prefix}/share’
    docdir=’${datarootdir}/doc/${PACKAGE_TARNAME}’
    dvidir=’${docdir}’
    exec_prefix=’NONE’
    host=’powerpc-e300c3-linux’
    host_alias=’powerpc-e300c3-linux’
    host_cpu=»
    host_os=»
    host_vendor=»
    htmldir=’${docdir}’
    includedir=’${prefix}/include’
    infodir=’${datarootdir}/info’
    install_sh=’${SHELL} /home/mc_build/sources/check-0.10.0/build-aux/install-sh’
    libdir=’${exec_prefix}/lib’
    libexecdir=’${exec_prefix}/libexec’
    localedir=’${datarootdir}/locale’
    localstatedir=’${prefix}/var’
    mandir=’${datarootdir}/man’
    mkdir_p=’/bin/mkdir -p’
    oldincludedir=’/usr/include’
    pdfdir=’${docdir}’
    prefix=’/home/mc_builds/build_check-0.10.0′
    program_transform_name=’s,x,x,’
    psdir=’${docdir}’
    sbindir=’${exec_prefix}/sbin’
    sharedstatedir=’${prefix}/com’
    sysconfdir=’${prefix}/etc’
    target_alias=»

    ## ———— ##
    ## confdefs.h. ##
    ## ———— ##

    /* confdefs.h */
    #define PACKAGE_NAME «Check»
    #define PACKAGE_TARNAME «check»
    #define PACKAGE_VERSION «0.10.0»
    #define PACKAGE_STRING «Check 0.10.0″
    #define PACKAGE_BUGREPORT «check-devel at lists dot sourceforge dot net»
    #define PACKAGE_URL «»
    #define PACKAGE «check»
    #define VERSION «0.10.0»

    configure: exit 77

  9. Все. Извините. Вопрос снят. PATH на компилятор был не правильно прописан

  10. Извините это снова я.
    Мучаюсь который день
    Естественно файлы я скачал все с Вашего архива. glib-2.44.1
    Испробовал уже Red Hat, Debian, Ubuntu, сейчас пытаюсь компилировать на Fedora
    Все архивы кроме glib и mc компилируются. При компиляции glib (из Вашего пакета) ошибка glib-genmarshal
    Где его взять этого маршала?

    • В статье указано, что могут быть проблемы с данной утилитой. Возможное решение — попробуйте установить следующий пакет (для ubuntu\debian):

      # sudo apt-get install libglib2.0-dev

    • компиляция ncurses заканчивается ошибкой:
      In file included from ../ncurses/curses.priv.h:283:0,
      from ../ncurses/lib_gen.c:19:
      _3498.c:835:15: error: expected ‘)’ before ‘int’
      ../include/curses.h:1594:56: note: in definition of macro ‘mouse_trafo’
      #define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)
      ^
      Makefile:785: ошибка выполнения рецепта для цели «../objects/lib_gen.o»
      make[1]: *** [../objects/lib_gen.o] Ошибка 1
      make[1]: выход из каталога «/home/valentin/Main_Folder/Mine/Si/CrossCompile/ncurses-5.9/ncurses»
      Makefile:109: ошибка выполнения рецепта для цели «install»
      make: *** [install] Ошибка 2

      что делать?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">