无法在Mac上编译C程序,但可以在Linux上编译
我在本地机器上编译编程作业时遇到了一些问题。该程序通过makefiles和编译命令分发给我们,这些文件和命令在学校的科学Linux服务器上工作。我的本地机器是Mac OS X El Capitan 当我在Mac上编译运行make的程序时,出现以下错误,导致编译无法继续:无法在Mac上编译C程序,但可以在Linux上编译,linux,macos,gcc,compiler-errors,clang,Linux,Macos,Gcc,Compiler Errors,Clang,我在本地机器上编译编程作业时遇到了一些问题。该程序通过makefiles和编译命令分发给我们,这些文件和命令在学校的科学Linux服务器上工作。我的本地机器是Mac OS X El Capitan 当我在Mac上编译运行make的程序时,出现以下错误,导致编译无法继续: myid-MacBook-Pro:mp6 myid$ make gcc -g -lm -std=c99 -Wall -Werror -c lodepng.c clang: error: -lm: 'linker' input
myid-MacBook-Pro:mp6 myid$ make
gcc -g -lm -std=c99 -Wall -Werror -c lodepng.c
clang: error: -lm: 'linker' input unused
make: *** [lodepng.o] Error 1
但是,当我将与正在进行的工作相同的代码推送到Linux服务器并在那里编译时,一切都很好。linux服务器使用gcc而不是clang:
[netid@linux-a2 mp6]$ make
gcc -g -lm -std=c99 -Wall -Werror -c functions.c
gcc -g -lm -std=c99 -Wall -Werror main.o lodepng.o imageData.o functions.o -o mp6 -lm
gcc -g -lm -std=c99 -Wall -Werror -c test.c
gcc -g -lm -std=c99 -Wall -Werror test.o lodepng.o imageData.o functions.o solution.o -o test -lm
在makefile中,以下是变量定义:
CC=gcc
CFLAGS=-g -lm -std=c99 -Wall -Werror
以及loadpng.o的目标定义
lodepng.o: lodepng.c
$(CC) $(CFLAGS) -c lodepng.c
如果能帮助我理解并克服这个错误,我将不胜感激
多谢各位
另外,在这一点上,我想我应该说我已经注意到了Clang和GCC之间的细微差别。在我看来,即使是由Clang生成的警告也会阻止编译继续进行,因此警告的行为类似于错误。但是对于GCC,如果它生成警告,它仍然编译对象文件。如果我弄错了,请纠正我。现在,您的Mac上出现编译错误,因为您试图将链接器命令(即-lm)传递到编译(即-c)中。编译源文件时提供链接标志(-c标志) 在您提供的另一个编译片段中,未使用的linker命令似乎未被注意到,这不是一件好事
对于您的最后一个问题,flag-Werror应该强制所有编译警告变成错误——这正是您所描述的。好的,非常感谢您的澄清!那么它真的很有趣,这是否意味着vanilla GCC似乎没有强制消除未使用的链接器命令?难怪Clang会成为首选编译器!