перекрестная компиляция проклятий ghc не найдена
Я попытался скомпилировать из linux i386 в arm-linux-gnueabihf, но я не могу этого сделать, потому что это дает мне эту странную ошибку при запуске "make":
checking ncurses.h usability... yes
checking ncurses.h presence... yes
checking for ncurses.h... yes
checking for setupterm in -ltinfo... no
checking for setupterm in -lncursesw... no
checking for setupterm in -lncurses... no
checking for setupterm in -lcurses... no
configure: error: in '/home/edi/ghc_cross/ghc/libraries/terminfo':
configure: error: curses library not found, so this package cannot be built
See 'config.log' for more details
make[2]: *** [libraries/terminfo/dist-install/package-data.mk] Error 1
make[1]: *** [all_libraries/terminfo] Error 2
make[1]: Leave Directory '/home/edi/ghc_cross/ghc'
make: *** [all] Error 2
Что я сделал:
-) скомпилировал 7.8.0 с github (в журнале написано "это должно было быть 7.8.0", я выбрал 7.8, потому что думал, что он будет более стабильным для кросс-компиляции) на мой i386 (обычная загрузка, настройка, создание, установка). Это сработало отлично
-) установлен новейший llvm от svn (версия LLVM 3.5 svn)
-) заменил libffi-3.0.11.смола.gz в ghc / libffi-тарболы с libffi-3.0.13
-) добавлена эта версия mk / build. mk:
SRC_HC_OPTS = -H32m _o -fasm -Rghc-timing
GhcStage1HcOpts = -O -fasm
GhcStage2HcOpts = -O0 -DDEBUG -Wall
GhcLibHcOpts = -O -fasm -XGenerics
GhcLibWays = v dyn
SplitObjs = NO
Stage1Only = YES
-) скачал исходный код ncurses из ftp.de.debian.org/debian/pool/main/n/ncurses/ncurses_5.9.orig.tar.gz и построил его с помощью"./настроить АРМ-ОС linux-gnueabihf-с-ССЗ=АРМ-ОС linux-gnueabihf-GCC и целевых=АРМ-ОС linux-gnueabihf-префикс=/usr/АРМ-ОС linux-gnueabihf " + "делать". после этого я добавил папку в свой $PATH
-) сделал" perl boot","./configure -- target=arm-linux-gnueabihf --with-gcc=arm-linux-gnueabihf-gcc -- prefix= / usr / arm-linux-gnueabihf" и "make". ./настроить работали, но дает мне эту странную ошибку.
Я также попытался скопировать все включенные файлы из ncurses в папку libraries / terminfo, но это также не сработало. Я думаю, что ошибка где-то в процессе сборки, но я не совсем уверен, поэтому я публикую эту ошибку.
Я также попытался получить libncurses5-dev.deb и libtinfo-dev из моего Raspberry pi с "apt-get download libncurses5-dev" и "apt-get download libncurses5-dev" скопировали их в мой i386, извлекли их и добавили в мой $PATH
Есть ли у кого-нибудь идея о том, как я могу решить эту проблему с помощью проклятий?PS: Я также убедился, что выполнил предварительные требования, упомянутые в ghc.haskell.org/trac/ghc/wiki/Building/Preparation/Linux и еще ghc.haskell.org/trac/ghc/wiki/Building/CrossCompiling
Править: это журнал моей конфигурации.журнал:
`
configure:3400: checking for setupterm in -lcurses
configure:3425: arm-linux-gnueabihf-gcc -o conftest -fno-stack-protector conftest.c -lcurses >&5
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: skipping incompatible /usr/lib/../lib/libcurses.a when searching for -lcurses
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: skipping incompatible /usr/lib/libcurses.a when searching for -lcurses
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lcurses
collect2: error: ld returned 1 exit status
configure:3425: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "Haskell terminfo package"
| #define PACKAGE_TARNAME "terminfo"
| #define PACKAGE_VERSION "0.2"
| #define PACKAGE_STRING "Haskell terminfo package 0.2"
| #define PACKAGE_BUGREPORT "judah dot jacobson at gmail dot com"
| #define PACKAGE_URL ""
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| /* end confdefs.h. */
|
| /* Override any GCC internal prototype to avoid an error.
| Use char because int might match the return type of a GCC
| builtin and then its argument prototype would still apply. */
| #ifdef __cplusplus
| extern "C"
| #endif
| char setupterm ();
| int
| main ()
| {
| return setupterm ();
| ;
| return 0;
| }
configure:3434: result: no
configure:3450: error: in `/home/edi/ghc_cross/ghc/libraries/terminfo':
configure:3452: error: curses library not found, so this package cannot be built See "config.log" for more details
`
Приветствую, Edi
1 ответ:
Итак, я нашел решение.
Я сделал следующее:
Скомпилировал библиотеку ncurses с arm-gcc следующей командой:
./configure --target=arm-linux-gnueabihf --with-gcc=arm-linux-gnueabihf-gcc --with-shared --host=arm-linux-gnueabihf --with-build-cpp=arm-linux-gnueabihf-g++
Впоследствии я сделал и настроил свой ghc следующим образом:
./configure --target=arm-linux-gnueabihf --with-gcc=arm-linux-gnueabihf-gcc --prefix=/usr/arm-linux-gnueabihf --with-shared --with-sysroot=/path/to/cursescompiled/libs
Затем он прошел и больше не спрашивал меня о библиотеке проклятий.
Итак, ребята, я надеюсь, что это будет полезно для вас