我试图从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
我做了什么:
- )从github编译7.8.0(日志说'应该是7.8.0',我选择7.8,因为我认为它对于交叉编译会更稳定)到我的i386(正常启动,配置,制作, make install)。这很好用
- )从svn(LLVM版本3.5svn)安装了最新的llvm
- )用libffi-3.0.13替换了ghc / libffi-tarballs中的libffi-3.0.11.tar.gz
- )添加了此版本的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
- )从ftp.de.debian.org/debian/pool/main/n/ncurses/ncurses_5.9.orig.tar.gz下载了ncurses的源代码,并用“./configure arm-linux”构建它-gnueabihf --with-gcc = arm-linux-gnueabihf-gcc --target = arm-linux-gnueabihf --prefix = / usr / arm-linux-gnueabihf “+”make“。之后我将文件夹添加到我的$ PATH
- )做了“perl boot”,“。/ configure --target = arm-linux-gnueabihf --with-gcc = arm-linux-gnueabihf-gcc --prefix = / usr / arm-linux-gnueabihf”和做”。 ./configure工作,但make给了我这个奇怪的错误。
我还尝试将所有包含的文件从ncurses复制到libraries / terminfo文件夹,但这也无效。我认为错误是在构建过程中的某个地方,但我不完全确定,所以这就是我发布此错误的原因。
我也尝试用“apt-get download libncurses5-dev”和“apt-get download libncurses5-dev”从我的Raspberry pi获取libncurses5-dev.deb和libtinfo-dev并将它们复制到我的i386中,提取它们并将它们添加到我的$ PATH
有没有人知道如何用诅咒解决这个问题?
PS:我还确保我符合ghc.haskell.org/trac/ghc/wiki/Building/Preparation/Linux和ghc.haskell.org/trac/ghc/wiki/Building/CrossCompiling中提到的要求编辑:这是我的config.log的日志:
`
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
答案 0 :(得分:5)
所以,我找到了解决方案。
我做的是以下内容:
使用arm-gcc使用以下命令编译ncurses库:
./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
然后它经历了,并且不再向我询问curses-library了。
所以伙计们,我希望这会对你有所帮助
答案 1 :(得分:0)
遇到类似的问题,这个问题使我找到了正确的解决方案。是的,我必须调整sysroot,但是作者的方法无效,配置脚本只是忽略了--with-sysroot
标志。所以我做了什么:
export SYSROOT=/usr/x86_64-w64-mingw32/sys-root/
export CFLAGS=--sysroot=$SYSROOT
export CPPFLAGS=--sysroot=$SYSROOT
export LDFLAGS=--sysroot=$SYSROOT
然后像往常一样在同一终端会话中进行配置和制作。