| 
|  | 
 
 发表于 2019-11-8 15:48:18
 40036 浏览  1 回复 
迅为4412开发板编译工程编译和交叉编译问题
 
| 
 本工程已经在环境:
 (1)ubuntu12.04
 (2)编译器:gcc version 5.4.1 20160904 (Ubuntu 5.4.1-2ubuntu1~12.04)
 (3)交叉编译器:gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67)
 (4)系统为x86_64
 
 makefile文件内容:
 /**********************************makefile start**********************************/
 CROSS_COMPILE = arm-none-linux-gnueabi-
 #CROSS_COMPILE =
 
 TAR = ctl.bin
 OBJS =  main.o  sys.o  usage.o dm.o\
 ver.o var.o  const_data.o gpio.o\
 public_config.o\
 xml.o private_config.o str.o file_info.o pipe.o pipe_cmd.o\
 process_mutex.o zlog_interface.o\
 event_core.o dm_epoll.o timer.o\
 socket.o sp_frame_analyse.o commun.o\
 cmd_core.o\
 dm_flow.o\
 monitor.o\
 dev_state.o\
 online.o\
 serial_port.o\
 info_census.o tick.o ab_process.o\
 abnormal.o  abnormal_act.o  abnormal_simulate.o ab_interface.o\
 conf_coprocess_module.o
 CC = $(CROSS_COMPILE)gcc
 CFLAGS = -g  -O2  -Wstrict-prototypes -Wno-unused-function -I/usr/include/libxml2 -I/usr/include/ -std=gnu11
 
 LDFLAGS = -pthread -lxml2  -lrt -lzlog
 
 $(TAR):        $(OBJS)
 $(CC) $(CFLAGS) -o $(TAR) $(OBJS) $(LDFLAGS)
 rm  -rf *.o
 clean:
 rm -rf *.o $(TAR)
 
 ifneq ("$V", "1")
 Q=@
 endif
 %.o : %.c
 @echo "\033[1;35m $(CC) $@\033[0m"
 $(Q) $(CC) -pipe $(CFLAGS) -c -o $@ $<
 /**********************************makefile end**********************************/
 在使用“CROSS_COMPILE =”编译时可以编译通过,但是使用“CROSS_COMPILE = arm-none-linux-gnueabi-”编译时出现以下三个问题:
 (1)cc1: error: unrecognized command line option "-std=gnu11";
 (2)cc1: warning: include location "/usr/include/libxml2" is unsafe for cross-compilation; cc1: warning: include location "/usr/include" is unsafe for cross-compilation。
 已经尝试将-std=gnu11改为-std=gnu99是可以编译的,但是报错
 “socket.c:262: error: impossible constraint in 'asm'
 socket.c:233: error: invalid 'asm': invalid operand for code 'w'
 {standard input}: Assembler messages:
 {standard input}:261: Error: bad instruction `rorw $8,'
 make: *** [socket.o] Error 1”。
 
 本工程已经在环境:(1)ubuntu16.04 LTS (2)编译器:gcc version 5.4.1 20160904 (Ubuntu 5.4.1-2ubuntu1~12.04)(3)交叉编译器:gcc version 6.3.0 (crosstool-NG crosstiil-ng-1.23.0)
 (4)系统为i686
 在gcc和交叉编译都可以编译通过的。
 
 makefile文件内容:
 /**********************************makefile start**********************************/
 CROSS_COMPILE = arm-linux-
 #CROSS_COMPILE =
 
 TAR = ctl.bin
 OBJS =  main.o  sys.o  usage.o dm.o\
 ver.o var.o  const_data.o gpio.o\
 public_config.o\
 xml.o private_config.o str.o file_info.o pipe.o pipe_cmd.o\
 process_mutex.o zlog_interface.o\
 event_core.o dm_epoll.o timer.o\
 socket.o sp_frame_analyse.o commun.o\
 cmd_core.o\
 dm_flow.o\
 monitor.o\
 dev_state.o\
 online.o\
 serial_port.o\
 info_census.o tick.o ab_process.o\
 abnormal.o  abnormal_act.o  abnormal_simulate.o ab_interface.o\
 conf_coprocess_module.o
 CC = $(CROSS_COMPILE)gcc
 CFLAGS = -g  -O2  -Wstrict-prototypes -Wno-unused-function -I/usr/include/libxml2
 #CFLAGS += -fPIC -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Wl,-z,relro,-z,now -Wl,--as-needed -Wl,--no-copy-dt-needed-entries -Wl,-z,noexecstatck -Wl,-z,noexecheap -w
 #CFLAGS += -finput-charset=GB2312 -fexec-charset=UTF-8
 
 LDFLAGS = -pthread -lxml2  -lrt -lzlog
 
 $(TAR):        $(OBJS)
 $(CC) $(CFLAGS) -o $(TAR) $(OBJS) $(LDFLAGS)
 rm  -rf *.o
 clean:
 rm -rf *.o $(TAR)
 
 ifneq ("$V", "1")
 Q=@
 endif
 %.o : %.c
 @echo "\033[1;35m $(CC) $@\033[0m"
 $(Q) $(CC) -pipe $(CFLAGS) -c -o $@ $<
 /**********************************makefile end**********************************/
 
 
 
 | 
 |  |  |  |
 
|  |  |  
|  |  | 
|  | 
| 看来还是编译器指定的不对,按照手册的编译步骤试试呢 | 
 |  |  |  |
 
|  |  |  
|  |  | 登录或注册 
扫一扫关注迅为公众号
  |