尝试为我的 mini2440 ARM 板构建最新版本的 u-boot 引导加载程序,我设法从 codesourcery 下载工具链包并将其提取到以下路径:
/usr/local/arm-2008q3/
我还为当前会话导出了以下值:
export PATH=$PATH:/usr/local/arm-2008q3/bin
export CROSS_COMPILE=arm-none-linux-gnueabi-
当我运行时,make
我得到以下输出,但我不知道为什么:
make: arm-none-linux-gnueabi-gcc: Command not found
for dir in tools examples api_examples ; do make -C $dir _depend ; done
make[1]: arm-none-linux-gnueabi-gcc: Command not found
make[1]: Entering directory `/home/deth/uboot/mini2440/tools'
make[1]: Nothing to be done for `_depend'.
make[1]: Leaving directory `/home/deth/uboot/mini2440/tools'
make[1]: arm-none-linux-gnueabi-gcc: Command not found
make[1]: Entering directory `/home/deth/uboot/mini2440/examples'
/bin/sh: 1: arm-none-linux-gnueabi-gcc: not found
我仔细检查了所有内容,二进制文件确实位于提到的文件夹中,但是......请解释我错在哪里。
答案1
好吧,经过近三天的苦思冥想,我终于解决了这个问题。说实话,如果我没有安装 COdesourcery 工具链和他们提供的可执行安装程序,我可能永远也解决不了这个问题。安装完成后,手动解压的版本开始执行!这当然导致我得出缺少库的结论。我尝试在单独的虚拟机上重现该问题,瞧,下面几句话解决了整个问题:
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
希望这能够对某些人有所帮助,并感谢所有试图提供帮助的人!
答案2
尝试设置更多变量。下面是一些适用于安装在我的主目录中的工具链的东西(您的不同,只需更改 MY_ARM_BASE)。我不做太多的交叉编译,所以我将必要的变量放入一个文件中(我将我的文件命名为“myconfig”),并使用点命令运行它以将其放入我的环境中(因此甚至不需要执行权限)。
. myconfig
现在,我使用的 makefile 不是来自工具链的供应商,因此我进入了工具链的 bin 目录,并添加了带有短名称的可执行文件的链接,例如:
ln -s arm-none-linux-gnueabi-g++ g++
然后我将 CXX 定义添加到工具链变量中以让 makefile 运行。
=== 为了方便起见,放入文件中 ===
MY_ARM_BASE=${HOME}/dev/toolchain/arm-2008q3
C_INCLUDE_PATH=${MY_ARM_BASE}/lib/gcc/arm-none-linux-gnueabi/4.3.2/include:${MY_ARM_BASE}/lib/gcc/arm-none-linux-gnueabi/4.3.2/include-fixed
LIBRARY_PATH=${MY_ARM_BASE}/arm-none-linux-gnueabi/libc/lib:${MY_ARM_BASE}/arm-none-linux-gnueabi/libc/usr/lib
CPLUS_INCLUDE_PATH=${MY_ARM_BASE}/arm-none-linux-gnueabi/include/c++/4.3.2
#OBJC_INCLUDE_PATH
COMPILER_PATH=${MY_ARM_BASE}/bin
#LD_RUN_PATH
#GPROF_PATH
#######
CC=${COMPILER_PATH}/gcc
CXX=${COMPILER_PATH}/g++
RANLIB=${COMPILER_PATH}/ranlib
STRIP=${COMPILER_PATH}/strip
export C_INCLUDE_PATH LIBRARY_PATH CPLUS_INCLUDE_PATH COMPILER_PATH
export CC CXX RANLIB STRIP