我在本地機器上編譯我的編程任務時遇到了一些麻煩。該程序通過已知可在學校科學Linux服務器上運行的makefile和編譯命令分發給我們。我的本地機器是Mac OS X El Capitan。無法在Mac上編譯C程序,但能夠在Linux上編譯
當我編譯我的程序運行讓我的Mac上,我得到以下錯誤,防止編輯從程序:
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而不是鏗鏘:
[[email protected] 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
在生成文件中,這些變量的定義:
CC=gcc
CFLAGS=-g -lm -std=c99 -Wall -Werror
和loadpng.o目標定義
lodepng.o: lodepng.c
$(CC) $(CFLAGS) -c lodepng.c
我會感謝任何幫助理解這個錯誤並克服它。
非常感謝。
另外,在這張紙上,我想我會說我注意到了Clang和GCC之間的細微差別。在我看來,即使Clang生成的警告也會阻止編譯進行,所以警告行爲就像錯誤一樣。但是對於GCC,如果它產生警告,它仍然編譯目標文件。如果我錯了,請糾正我。
好的非常感謝你的澄清!那真的很有趣,這是否意味着GCC似乎不強制消除未使用的鏈接器命令?難怪Clang正在成爲首選的編譯器! – AKKA