当前位置: 技术问答>linux和unix
交叉编译出错
来源: 互联网 发布时间:2016-09-04
本文导语: 我先用本地编译器g++,编译成功,但是用交叉编译时却出错。 一、 本地编译 1、 Makefile文件编写 SYDemo:modulapi.o g++ -g modulapi.o SYProtocol.a –o SYDemo modulapi.o:modulapi.cpp SYProtocol.h g++ -g –c modulapi.cpp –o modu...
我先用本地编译器g++,编译成功,但是用交叉编译时却出错。
一、 本地编译
1、 Makefile文件编写
SYDemo:modulapi.o
g++ -g modulapi.o SYProtocol.a –o SYDemo
modulapi.o:modulapi.cpp SYProtocol.h
g++ -g –c modulapi.cpp –o modulapi.o
clean:
rm –f *.o SYDemo
2、 make编译成功
3、 ./SYDemo设备可以运行
二、 交叉编译
1、Makefile文件编写
SYDemo:modulapi.o
arm-linux-g++ -g modulapi.o SYProtocol.a –o SYDemo
modulapi.o:modulapi.cpp SYProtocol.h
arm-linux-g++ -g –c modulapi.cpp –o modulapi.o
clean:
rm –f *.o SYDemo
出错,结果如下:
2、改用单步编译
(1)编译modulapi.o文件
arm-linux-g++ -g –c modulapi.cpp –o modulapi.o
这一步没有出错
(2)编译SYDemo文件,出错,结果如下:
[root@localhost root]# arm-linux-g++ -g -c modulapi.cpp -o modulapi.o
[root@localhost root]# arm-linux-g++ -g modulapi.o SYProtocol.a -o SYDemo
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
SYProtocol.a: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
请教出错原因
一、 本地编译
1、 Makefile文件编写
SYDemo:modulapi.o
g++ -g modulapi.o SYProtocol.a –o SYDemo
modulapi.o:modulapi.cpp SYProtocol.h
g++ -g –c modulapi.cpp –o modulapi.o
clean:
rm –f *.o SYDemo
2、 make编译成功
3、 ./SYDemo设备可以运行
二、 交叉编译
1、Makefile文件编写
SYDemo:modulapi.o
arm-linux-g++ -g modulapi.o SYProtocol.a –o SYDemo
modulapi.o:modulapi.cpp SYProtocol.h
arm-linux-g++ -g –c modulapi.cpp –o modulapi.o
clean:
rm –f *.o SYDemo
出错,结果如下:
2、改用单步编译
(1)编译modulapi.o文件
arm-linux-g++ -g –c modulapi.cpp –o modulapi.o
这一步没有出错
(2)编译SYDemo文件,出错,结果如下:
[root@localhost root]# arm-linux-g++ -g -c modulapi.cpp -o modulapi.o
[root@localhost root]# arm-linux-g++ -g modulapi.o SYProtocol.a -o SYDemo
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
/opt/EmbedSky/4.3.3/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: SYProtocol.a(SYProtocol.o): Relocations in generic ELF (EM: 3)
SYProtocol.a: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
请教出错原因
|
SYProtocol.a 是用什么编译出来的 可能你要用当前的交叉工具重新编译下
|
1楼正解,.a 文件也要交叉编译
|
静态库格式可能不对,要同上面的一样!
|
同意一楼,库可能要单独编译下吧
|
感觉你的编译器没有安装好