【问题标题】:Makefile linking error: undefined main [closed]Makefile链接错误:未定义的主要[关闭]
【发布时间】:2013-08-27 05:01:32
【问题描述】:
target: $(patsubst %.c,%.o,$(wildcard ./src/*.c))
    @echo "making target"
    $(cc) $(patsubst %.c,%.o,$(wildcard ./src/*.c)) $(LIBS) -o gif 
#   $(cc) $(wildcard ./objects/*.o) $(LIBS) -o gif 

./objects/%.o: %.c
    @echo "making objects now"
    @mkdir -p ./objs
    $(cc) $(CFLAGS) $(LDFLAGS) -c $< -o ./objects/$@

问题是对象 .o 文件是在 src 文件夹中创建的。 我想在对象文件夹中创建对象。请帮忙?

输出是

making target
gcc ./src/gif_display.o ./src/gif_lzw.o ./src/gif_read.o ./src/sysm.o ./src/x86_main.o -lm -lc -o gif 

【问题讨论】:

  • 我认为您需要先将其清理干净,然后将其放在文件末尾
  • 不,这不能解决问题。
  • 你能把“make target”的输出贴出来吗?
  • [joshis1@(none) GIF_Utility]$ make target echo "making target" Making target gcc -lm -lc -o gif /usr/lib/gcc/i686-redhat-linux/4.6.3 /../../../crt1.o: 在函数_start': (.text+0x18): undefined reference to main'collect2: ld 返回 1 退出状态 make: *** [target] 错误 1 ​​[joshis1@(none) GIF_Utility]$

标签: c gcc makefile


【解决方案1】:

换一种方式格式化,输出如下:

[joshis1@(none) GIF_Utility]$ make target
echo "making target"
making target
gcc -lm -lc -o gif
/usr/lib/gcc/i686-redhat-linux/4.6.3/../../../crt1.o: In function _start': (.text+0x18): undefined reference tomain' collect2: ld returned 1 exit status make: * [target] Error 1
[joshis1@(none) GIF_Utility]$

实际的编译行是:

gcc -lm -lc -o gif

如您所见,编译器没有输入文件,所以问题在于您对patsubst 的使用。如果你用这样的东西替换它,它会正确生成你想要的文件列表:

$(patsubst %.c,%.o,$(wildcard ./src/*))

【讨论】:

  • 谢谢!我试过了。现在它得到以下问题。 .o 是在源文件夹本身中创建的。
  • 请不要这样编辑您的问题 - 如果您有不同的问题,请提出新问题,否则您会使此答案看起来错误,因为它与您的原始问题无关
【解决方案2】:

您需要修复您的 patsubst 才能更改目录:

$(patsubst ./src/%.c,./objs/%.o,$(wildcard ./src/*.c))

【讨论】:

    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    相关资源
    最近更新 更多