微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > 嵌入式系统设计讨论 > 交叉编译的程序可以在电脑上执行,却不能在ARM上执行

交叉编译的程序可以在电脑上执行,却不能在ARM上执行

时间:10-02 整理:3721RD 点击:
环境配置:PC:Ubuntu16.04
开发板:基于cortex A5的开发板,搭载Linux操作系统
交叉编译工具:arm-linux-gnueabihf-
问题:
程序源码在Ubuntu下直接编译可以正常运行,没有任何问题,但是修改Makefile里面的编译工具为交叉编译工具后,生成的可执行文件仍然能在pc运行,却不能在arm上运行。
已经修改过的Makefile文件:
all: main
OUT      ?= Release/Linux/
CC       ?= arm-linux-gnueabihf-gcc
CFLAGS   ?= -pthread -Wall -g
CXX      ?= arm-linux-gnueabihf-g++
CXXFLAGS ?= -pthread -Wall -g
COBJS     = HIDAPI/hid-libusb.o
CPPOBJS   = main.o \
            SLABHIDtoUART/HIDtoUART.o \
            SLABHIDtoUART/HIDtoUARTCP2110.o \
            SLABHIDtoUART/HIDtoUARTCP2114.o \
            SLABHIDDevice/HIDDevice.o \
            SLABHIDDevice/SLABHIDDevice.o \
            Common/ReportQueue.o
OBJS      = $(COBJS) $(CPPOBJS)
LIBS      = `pkg-config libusb-1.0 --libs`
INCLUDES ?= -I./Common -I./HIDAPI -I./SLABHIDtoUART -I./SLABHIDDevice `pkg-config libusb-1.0 --cflags`
main: $(OBJS)
        $(CXX) $(CXXFLAGS) $(LDFLAGS) $^ $(LIBS) -o $(OUT)main
$(COBJS): %.o: %.c
        $(CC) $(CFLAGS) -c $(INCLUDES) $< -o $@
$(CPPOBJS): %.o: %.cpp
        $(CXX) $(CXXFLAGS) -c $(INCLUDES) $< -o $@
clean:
        rm -f $(OBJS) $(OUT)main
.PHONY: clean

然后在电脑端可以执行,而且用ldd命令可以列出所有的依赖关系,也可以用gdb正常调试,
拷贝到开发板上,先执行程序,返回一个错误,然后用gdbserver调试,直接报格式不正确,
两次执行返回结果如下:
#
# ./main
./main: line 6: syntax error: unexpected "("
#
#
#
#
# gdbserver 192.168.1.101:2345 main
Process main created; pid = 819
Cannot exec main: Exec format error.

Child exited with status 127
No program to debug
Exiting
#
#

大触们,这究竟是怎么一回事?才疏学浅,求帮助。
新人,就11分,全放在这个问题上[qq]604705348[/qq]

交叉编译的程序不可能在电脑上执行,看你的Makefile文件也没错啊。

电脑的linux默认生成电脑可执行程序,需要该交叉编译工具

我把交叉编译工具的宏定义删掉,然后手动添加到需要交叉编译器的地方去,然后就好了

我把交叉编译工具的宏定义删掉,然后手动添加到需要交叉编译器的地方去,然后就好了

好了就OK了

感谢你的反馈。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top