交叉编译的程序可以在电脑上执行,却不能在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]
开发板:基于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了
感谢你的反馈。