没有编译floor()ceil()和math.h在gcc中include和-lm
问题描述:
我一直在尝试编译我的代码,它不想工作。没有编译floor()ceil()和math.h在gcc中include和-lm
它给了我一个消息错误,指出引用是不确定的。
我用过的文件math.h包括我的所有模块和我的主文件:
#include <math.h>
下面是bash的屏幕输出:
bash-4.1$ make
gcc -W -Wall -lm -g -c -o imagePGM.o imagePGM.c
gcc tp2.o imagePGM.o -o tp2
imagePGM.o: In function `imageContraste':
imagePGM.c:(.text+0x1067): undefined reference to `floor'
imagePGM.c:(.text+0x10c1): undefined reference to `ceil'
imagePGM.c:(.text+0x1103): undefined reference to `floor'
imagePGM.o: In function `imageRatio':
imagePGM.c:(.text+0x1371): undefined reference to `floor'
imagePGM.c:(.text+0x13aa): undefined reference to `ceil'
imagePGM.c:(.text+0x13ce): undefined reference to `floor'
collect2: erreur: ld a retourné 1 code d'état d'exécution
make: *** [tp2] Erreur 1
bash-4.1$
我使用了“-lm “与海湾合作委员会的争论。
这里是我的makefile:
# Variables predefinies
CC = gcc
CFLAGS = -W -Wall -lm -g
# Dependances
# Par defaut, make (sans arguments) ne se soucie que de la premiere dependance rencontree
# Aucune action par defaut ici, car gcc ne "sait" pas comment traiter ces dependances
# Dependances plus complexes : on ne peut melanger .c, .o et .h dans la meme dependance
tp2 : tp2.o imagePGM.o
tp2.o : tp2.c imagePGM.h
# $(CC) $(CFLAGS) -c tp2.c
imagePGM.o : imagePGM.c imagePGM.h
clean :
rm tp2 tp2.o imagePGM.o
我是否需要其他实现一些或做一些具体的事情?
答
我返工我的makefile从这个:
# Variables predefinies
CC = gcc
CFLAGS = -W -Wall -g
LIBS=-lm
# Dependances
# Par defaut, make (sans arguments) ne se soucie que de la premiere dependance rencontree
# Aucune action par defaut ici, car gcc ne "sait" pas comment traiter ces dependances
# Dependances plus complexes : on ne peut melanger .c, .o et .h dans la meme dependance
tp2 : tp2.o imagePGM.o
tp2.o : tp2.c imagePGM.h
# $(CC) $(CFLAGS) -c tp2.c
imagePGM.o : imagePGM.c imagePGM.h
clean :
rm tp2 tp2.o imagePGM.o
要这样:
CC=gcc
CFLAGS= -lm
DEPS = imagePGM.h
OBJ = imagePGM.o tp2.o
%.o: %.c $(DEPS)
$(CC) -W -Wall -c -o [email protected] $< $(CFLAGS)
tp2: $(OBJ)
gcc -W -Wall -o [email protected] $^ $(CFLAGS)
的标志末
你-lm是在错误的地方有联系。它必须到最后。 – nos
您正在将'-lm'传递给编译器。这没有效果。你必须将它传递给链接器,而不是链接器,并且在链接序列中它必须出现在任何调用'libm'中定义的函数的目标文件之后。你需要对GCC和GNU Make的编译和链接有一个基本的了解。这是[相当不错的初学者教程](https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html)。对于权威文档,[这里是GCC手册](https://gcc.gnu.org/onlinedocs/)和[这里是GNU Make手册](https://www.gnu.org/software/make/manual /make.html) –