【问题标题】:Cross Compile ncurses application for ARM linux用于 ARM linux 的交叉编译 ncurses 应用程序
【发布时间】:2016-01-16 07:49:50
【问题描述】:

我想从我的工作站(x86、linux)交叉编译一个用于 ARM 应用处理器的应用程序。首先,我为我的系统构建:

gcc -static -g -Wall -c main.c -o main.o
gcc -g -Wall main.o -o myApplication -lncurses

这个构建就像我想要的一样,也可以工作。如果我想为 arm 构建这个

arm-linux-gnueabi-gcc -static -g -Wall -c main.c -o main.o
arm-linux-gnueabi-gcc -g -Wall main.o -o myApplication -lncurses

但这不会编译。

/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lncurses
collect2: Error

那么:如何以这种方式交叉编译一个 ncurses 应用程序?

【问题讨论】:

  • 您的 ARM 版本的 ncurses 库位于何处?除非你试图把它放在交联器的默认搜索路径覆盖的某个地方,否则你需要告诉它在哪里可以找到它。 /usr/lib/... 中的那个是 x86 代码。
  • 我在我的所有目录中搜索它,但找不到它。我是否必须为自己的 arm 构建 ncurses 或者是否有任何软件包或 ppa 用于此 (ppa)?
  • 真的,交叉编译时最好的办法是在主机上挂载目标设备的文件系统(或者只是在主机上保留一份副本)并使用--sysroot= 构建。毕竟,如果 that 没有正确的库,那么你的动态链接程序无论如何也不会在那里运行。

标签: linux arm cross-compiling ncurses


【解决方案1】:

一种简单的方法是下载ELLCC 的二进制版本。它带有一个预构建的库,包括 ncurses。下载页面为here。如果你抓住例如http://ellcc.org/releases/ellcc-x86_64-linux-eng-0.1.27.tgz(版本号会随时间变化),可以解压。对于 ARM,您的构建行如下所示:

~/ellcc/bin/ecc -target arm-linux-engeabihf -g -Wall -c main.c -o main.o
~/ellcc/bin/ecc -target arm-linux-engeabihf -g -Wall main.o -o myApplication -lncurses

它创建一个静态二进制文件,因此您不必担心共享库版本。

【讨论】:

  • 谢谢@richard,你的回答帮助了我!
猜你喜欢
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多