【问题标题】:Travis CI - Unable to run an `c` executable in makefileTravis CI - 无法在 makefile 中运行“c”可执行文件
【发布时间】: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&lt;pathToLibrary&gt; 以及哪些库-l&lt;libShortName&gt; 它不需要知道#include 文件的位置-I.

标签: c shell makefile travis-ci


【解决方案1】:

您的hellofunc.o 来自不同的系统(试试file hellofunc.o)。删除它,然后重新编译它。

您是否进行了交叉编译?你有安装在不同机器上的主目录吗?也许解压缩其他人在不同架构上制作的档案?

【讨论】:

  • 成功了。谢谢。我正在为我的项目设置一个持续集成服务器,它是 Travis-CI 服务器上的示例测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
相关资源
最近更新 更多