ubuntu 编译遇到问题

本文详细介绍了在Ubuntu16.04.1(64位)环境下编译Linux2.6.39.4内核时遇到的两个常见错误及解决方案。首先,针对/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc命令未找到的问题,文章指导用户安装必要的32位库来解决。其次,对于Can't use 'defined(@array)'的错误,提供了修改kernel/timeconst.pl文件的具体步骤,以适应Perl版本升级后的语法变化。

1: /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc: not found

wihoog@ubuntu:/work/arm9_develop/linux-3.5$ make

make: /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc:命令未找到

  CHK     include/linux/version.h

  CHK     include/generated/utsrelease.h

make[1]: 'include/generated/mach-types.h' is up to date.

  CC      kernel/bounds.s

/bin/sh: 1: /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc: not found

/work/arm9_develop/linux-3.5/./Kbuild:35: recipe for target 'kernel/bounds.s' failed

make[1]: *** [kernel/bounds.s] Error 127

Makefile:820: recipe for target 'prepare0' failed

make: *** [prepare0] Error 2
 

找到问题所在:因为我系统是64位的,需要安装32位库,执行下面语句便可安装

sudo apt-get install lib32z1 lib32ncurses5   lib32bz2-1.

2:Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.

0、开发环境
Ubuntu16.04.1(64bit)
linux-2.6.39.4
 
1、错误描述
使用ubuntu14.04(64bit)编译linux2.6.39.4并没有出现什么错误,但是使用ubuntu16.04.1(64bit)编译linux-2.6.39.4时,却提示Can't use 'defined(@array)' (Maybe you should just omit the defined()?)错误。
 
2、解决方法
参考:编译kernel perl版本bug
最近升级了一下MAC系统,突然发现android的Linux kernel无法编译通过了,报了如下错误:
Can't use '!defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
其实,提示的错误信息已经明确告诉你了,你应该省略defined().
这里,我们打开 kernel/timeconst.pl
@val = @{$canned_values{$hz}};
if (!defined(@val)) {
@val = compute_values($hz);
}
output($hz, @val);
将if (!defined(@val)) 改为if (!(@val)),再次编译就可以通过了。
查了一下更新,发现其中有一项是perl版本升级到了 v5.22.1,然后查了perl官方文档,发现官网因为一个bug,该版本将defined(@array)去掉了。可以直接使用数组判断非空。

 

<think>好的,我现在需要解决用户在Ubuntu系统上编译Carla时遇到的问题。根据用户提供的引用资料,问题主要集中在几个方面:Clang版本、xerces下载地址、CMakeLists.txt的修改以及第三方库下载问题。让我一步步理清楚。 首先,用户提到在编译过程中需要将Clang的版本从8改为10。根据引用[3]中的信息,用户需要在三个文件中搜索“clang”关键字,将版本号修改。这应该是由于Carla 0.9.13需要Clang 10的支持,而系统默认的可能是Clang 8,导致编译错误。我需要确认具体是哪三个文件,可能是与构建配置相关的Makefile或CMakeLists.txt文件。不过用户没有具体说明,可能需要进一步查找文档或常见问题。 接下来是xerces-c-3.2.3.tar.gz下载地址的问题。引用[3]指出,原地址不可用,需要修改Setup.sh文件的第432行,将XERCES_REPO的地址更改为Apache的存档地址。这应该是由于原来的下载链接失效,导致构建脚本无法获取依赖库。用户需要手动修改脚本中的URL,确保能够正确下载。 然后是CMakeLists.txt的修改,排除test包的编译编译test包时可能会遇到错误,而用户可能不需要这些测试模块。根据引用[3],用户需要注释掉Libcarla目录中CMakeLists.txt里关于test的部分,这样可以跳过编译test,避免报错。这一步需要用户熟悉CMake语法,找到对应的add_subdirectory(test)或者类似的行,并将其注释。 此外,第三方库下载问题。由于网络问题,某些依赖库可能下载失败。引用[3]建议,如果某个库下载失败,可以手动删除Build目录中的对应文件,重新运行编译脚本,让脚本重新下载。用户可能需要多次尝试,或者寻找镜像源替换下载链接。 另外,引用[1]和[2]提到了备份原有Content目录,避免冲突。这可能在安装或更新Carla时发生,需要重命名原有目录以防止覆盖。用户需要确保在编译前备份,避免数据丢失。 综合这些步骤,用户需要按照顺序处理Clang版本、xerces下载地址、CMakeLists.txt修改以及处理第三方库下载问题。可能的难点在于找到正确的文件进行修改,以及处理网络问题导致的依赖下载失败。建议用户逐步检查每个步骤,确保修改正确,并在遇到下载问题时手动干预。</think>在Ubuntu系统上编译Carla时,常见问题主要集中在依赖版本、编译配置和文件下载等方面。以下是分步解决方案: --- ### 一、Clang版本不匹配问题 1. **定位文件**:找到涉及Clang编译的三个文件(通常为`Setup.sh`和`Libcarla/CMakeLists.txt`,具体路径可能因版本不同有所变化) 2. **修改版本号**:将文件中所有`clang-8`或`clang 8`替换为`clang-10`或`clang 10`[^3] ```bash sed -i 's/clang-8/clang-10/g' /path/to/file ``` --- ### 二、xerces下载地址失效 1. **修改Setup.sh**:打开Carla源码目录下的`Setup.sh`,找到第432行(或搜索`XERCES_REPO`) 2. **替换URL**:将其修改为有效地址: ```bash XERCES_REPO="https://archive.apache.org/dist/xerces/c/3/sources/xerces-c-3.2.3.tar.gz" ``` 保存后重新运行`./Setup.sh` --- ### 三、跳过test模块编译 1. **修改CMakeLists.txt**:进入`Libcarla`目录,打开`CMakeLists.txt` 2. **注释test相关行**:找到类似以下内容并注释: ```cmake # add_subdirectory(test) # set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/test/cmake" ${CMAKE_MODULE_PATH}) ``` 保存后重新编译 --- ### 四、第三方库下载失败 1. **手动处理**:进入`/carla/Build`目录,删除下载失败的文件(如`boost-1.72.0.tar.gz`) 2. **重新下载**:直接通过浏览器访问报错中的URL手动下载,将文件放入`Build`目录对应位置 3. **重试编译**:重新运行编译命令,跳过已下载的依赖 --- ### 五、备份原有文件(预防性操作) 编译前建议备份原有内容,避免覆盖: ```bash mv /home/ubuntu/carla/Unreal/CarlaUE4/Content/Carla /home/ubuntu/carla/Unreal/CarlaUE4/Content/Carla_backup ``` 此操作可防止因文件冲突导致编译失败[^1] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值