❶ 海思3516DV300搭建交叉编译环境问题记录
刚开始搭建海思交叉编译环境的时候遇到问题:
安装完arm-himix200-linux后,输入arm-himix200-linux -v,会出现如下错误:
xxx@xxx-virtual-machine:~/Downloads/study3516DV300/rp-hi3516dv300-busybox/sample/hifb$ arm-himix200-linux-gcc -v
arm-himix200-linux-gcc: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.
错误方法:
export LC_CTYPE=C.UTF-8
这样做的话,arm-himix200-linux-gcc -v会显示成功,但是当去编译sample时候,会出现这个错误
collect2: fatal error: /opt/hisi-linux/x86-arm/arm-himix200-linux/host_bin/../lib/gcc/arm-linux-gnueabi/6.3.0/../../../../arm-linux-gnueabi/bin/nm terminated with signal 6 [Aborted], core mped
解决方案:
vi ~/.bashrc
最后加入这两句,完成后保存
export LC_ALL=C
export PATH="/opt/hisi-linux/x86-arm/arm-himix100-linux/bin:$PATH"
编辑之后使环境变量生效的命令:source ~/.bashrc
之后编译sample通过,生成sample_hifb文件。
❷ C++编译失败报错很奇怪,没说错误在哪儿,怎么解决源代码和报错信息如下。
这个是linux下面的c++编译对吗,它跟挂载属性inode64有关系。比较老的交叉编译器,只支持32位inode的文件访问,当遇到超过4294967295的文件,就会编译出错并提示:Value too large for defined data type。
那么解决方案就有两种:
Ø 升级交叉编译器版本,让其支持inode64的源文件。
Ø 交叉编译器版本不变,将文件系统挂载属性从inode64改为inode32。
❸ 交叉编译几种常见的报错
(1)交叉编译器
在主机上用来编译其它类型机器上可执行代码的编译器就叫交叉编译器,我们进行嵌入式linux的开发主机大部分都是X86,而我们的嵌入式系统的处理器有可能是ARM/MIPS等非X86处理器,这时候就必须使用ARM/MIPS的交叉编译器才能编译出在这些处理器上能够执行的代码。这里我们使用的是ARM最新的EABI编译器。
交叉编译器在编译的时候,对于浮点运行会预设硬浮点运算FPA(float point architecture),而没有FPA的CPU,比如三星的2440等,会使用FPE(float point emulation即软浮点),这样在速度上就会受到极大限制。使用EABI(embeded application binary interface)则可以对此改善处理。
(2)不修改MAKEFILE来建立编译环境
将arm-2008q3.tar.bz2拷贝到ubuntu系统的某个目录,解压后。使用VI编辑/etc/bash.bashrc,在文件最后加入环境变量设置(注:加bin的含义是交叉编译器工具目录):
保存后,用source运行一次该文件,就可以了。
(3)gcc: error trying to exec 'cc1': execvp: No such file or directory 的解决
今天在编译开发板环境时,明明设置好编译器的环境变量了,编译时就是会出现:gcc: error trying to exec 'cc1': execvp: No such file or directory 错误提示。后来发现一个方法可以解决,输入:whereis gcc,就可以了发现好几个gcc,包括/usr/bin/gcc,所以我就把PATH路径设过去,就OK了。
(4)Clock skew detected. Your build may be incomplete
如果你装了Windows Linux双系统,系统时间很可能出问题,从而造成文件修改时间比系统时间晚,两种办法:
1,应该是你的PC的系统时钟错误,在BIOS中修改正确。
2,使用touch命令将所有文件的时间戳修改为你系统的当前时间。解决方法:find ./-name "*" -exec touch {} \;
❹ 交叉编译时提示 对'__C_ctype_b'的未定义引用
出现这种情况的原因,主要是C/C++编译为obj文件的时候并不旅卖需要函数的具体实现,只要有函数的原型即可。但是在链接为可执行文件的时候就必须要具体的实现了。如果错误是未声明的引用,那就是找不到函数的原型,解决办法这里就不细致说了,通常是相关的头文件未包含。
解决办法
指定原因就好办了,既然知道是缺少了函数的喊昌具体实现,那么就给它这个函数的实现就好了。比如上面的例子,是因为缺失了dlopen、dlsym、dlerror、dlclose这些函数的实现,这几个函数是用于加载动态链接库的,编译的时候需要添加-ldl来使用dl库(这是静态库,在系统目录下/usr/lib/i386-linux-gnu/libdl.a、/usr/lib/x86_64-linux-gnu/libdl.a)。
但是看上面编译的时候是有添加-ldl选项的,那么为什么不行呢?
gcc 依赖顺序问题
这个主要的原因是gcc编译的时候,各个文件依赖顺序的问题。
在gcc编译的时候,如果文件a依赖于文件b,那么编译的时候必须把a放前面,b放后面。
例如:在main.c中使用了pthread库相关函数,那么编译的时候必须是main.c在前,-lpthread在后。gcc main.c -lpthread -o a.out。
上面拆渗逗出现问题的原因就是引入库的顺序在前面了,将其放置在后面即可了。
g++ -o spider bloomfilter.o confparser.o crc32.o dso.o hashs.o md5.o qstring.o sha1.o socket.o spider.o threads.o url.o -rdynamic -lpthread -levent -lcrypt -ldl
❺ ubuntu系统系交叉编译出现command not found错误,谢谢
1、核实 mips-openwrt-linux-uclibc-gcc 是否有执行权限
chmod +x mips-openwrt-linux-uclibc-gcc
2、核实 mips-openwrt-linux-uclibc-gcc 是否为快捷链接,
1)其链接的gcc是否有执行权限
2)其链接是否在正确的位置
3、核实PATH路劲是否添加正确(相信楼主是加正确了的)
根据楼主截图,这个环境变量是有的,一般应该检查1、2点
❻ 求助:mplayer交叉编译时遇到的错误
交叉编译mplayer的时候出现这样的错误arm1176jzf-s+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/include/stdio.h:36,
from mplayer.c:5:
./libavutil/bswap.h:42:34: error: expected identifier or '(' before '__extension__'
static av_always_inline uint16_t bswap_16(uint16_t x)
^
./libavutil/bswap.h:57:34: error: expected identifier or '(' before '__extension__'
static av_always_inline uint32_t bswap_32(uint32_t x)
^
./libavutil/bswap.h:99:24: error: expected identifier or '(' before '__extension__'
static inline uint64_t bswap_64(uint64_t x)
^
mplayer.c: In function 'main': 错误处代码 static av_always_inline uint16_t bswap_16(uint16_t x)
//static inline uint16_t bswap_16(uint16_t x)
{
#if defined(ARCH_X86)
__asm("rorw $8, %0" :
LEGACY_REGS (x) :
"0" (x));
#elif defined(ARCH_SH4)
__asm__("swap.b %0,%0":"=r"(x):"0"(x));
#else
x= (x>>8) | (x<<8);
#endif
return x;
}
❼ 兄弟我最近刚学QT,到了交叉编译这一块,make之后老是出现 下面的错误
交叉编译的时候要加上配置要加上:-embedded arm
例如:
./configure \
-no-pch \
-no-dbus \
-no-nas-sound \
-no-opengl \
-no-sm \
-no-xshape \
-no-xinerama \
-no-xcursor \
-no-xfixes \
-no-xrandr \
-no-xrender \
-no-fontconfig \
-no-xkb \
-no-glib \
-little-endian \
-no-mmx -no-3dnow -no-sse -no-sse2 \
-embedded arm \
-xplatform qws/linux-arm-g++ \
-qconfig smal
希望可以帮助到你