【发布时间】:2016-02-11 11:57:00
【问题描述】:
我有以下 Makefile 编译,创建一个可执行文件,然后执行它。
CC=gcc
CFLAGS=-I.
DEPS = hellomake.h
OBJ = hellomake.o hellofunc.o
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
hellomake: $(OBJ)
$(CC) -o $@ $^ $(CFLAGS)
./hellomake
它在我的本地机器上完美运行,当它在 Travis 中构建时出现以下错误。
gcc -o hellomake hellomake.o hellofunc.o -I.
hellomake.o: file not recognized: File format not recognized
collect2: ld returned 1 exit status
make: *** [hellomake] Error 1
【问题讨论】:
-
您的
hellomake不是二进制可执行文件。运行file hellomake找出它是什么。也许还有head -n 1 hellomake。你的构建出了点问题。 -
我这样做了,以下是错误。 gcc -o hellomake hellomake.o hellofunc.o -I。 hellomake.o:文件无法识别:文件格式无法识别 collect2:ld 返回 1 退出状态 make:*** [hellomake] 错误 1
-
@DhiwaTg 您的
hellofunc.o来自不同的系统(尝试file hellofunc.o)。删除它,然后重新编译它。 -
@Jens.. 是的,我在一分钟前做过同样的事情,现在效果很好。
-
$(CFLAGS) 不是传递给链接步骤的正确方法。如果需要,链接步骤需要知道库路径
-L<pathToLibrary>以及哪些库-l<libShortName>它不需要知道#include 文件的位置-I.
标签: c shell makefile travis-ci