我正在学校做练习(Mac OSX),并且想继续在家(Ubuntu 16.04)。要执行此项目,我需要使用一个库:Minilibx(https://github.com/ttshivhula/minilibx)尝试gcc时遇到了问题。以下是gcc告诉我的内容:“ mlx_init.c :(。text + 0x2c):参考文献«XShmQueryVersion»”(英语中未定义的引用)。每个库(甚至math.h)都有很多这样的错误。在学校,编译时没有问题,但在家里却行不通。
我用这一行编译:
gcc -Wall -Werror -Wextra -std=gnu99 -I. -g -lm -lGLEW -lglfw -lGL ${OBJS} minilibx/libmlx_Linux.a -o ${NAME}
与:
OBJS = ${SRC:%.c=%.o}
SRC = cub3d.c ${addprefix ${GNL_PATH}, $(GNL_FILE)} ${addprefix ${LIB_PATH}, $(LIB_FILE)}
GNL和LIB是我的两个个人特权。
我试图改变我的编译方式,但是我找不到问题所在。
经验法则:在链接命令行上,库位于对象文件之后,而不是对象文件之前。
如果将库放在目标文件之前,则某些系统将不会记录由库定义的符号,因为在命令行从左到右处理时,对库中的任何函数都没有未定义的未定义引用,因此当扫描目标文件,不重新扫描库。
更改此:
gcc -Wall -Werror -Wextra -std=gnu99 -I. -g -lm -lGLEW -lglfw -lGL ${OBJS} \
minilibx/libmlx_Linux.a -o ${NAME}
至:
gcc -Wall -Werror -Wextra -std=gnu99 -I. -g ${OBJS} -lm -lGLEW -lglfw -lGL \
minilibx/libmlx_Linux.a -o ${NAME}
现在您有机会链接功能。在Mac上,使用-lm
是不必要但无害的;数学函数位于主系统库中。其他系统,尤其是Linux,仍然有一个单独的数学库-主要是为了歇斯底里的葡萄干(……呃,历史原因……)。
我发现您也需要将minilibx/libmlx_Linux.a
参数也放在命令行的前面(紧接在后面),我并不感到惊讶${OBJS}
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句