【问题标题】:error makefile C- opengl错误生成文件 C-opengl
【发布时间】:2016-03-30 14:10:04
【问题描述】:

我正在尝试为 opengl 编译一个包含 c 代码的 .c 文件。 但我不断收到以下错误: 有趣的问题。 未定义对“glClear”的引用 未定义对“gluLookAt”的引用 未定义对“glLoadIdentity”的引用 未定义对“glColor3f”的引用 未定义对“glLineWidth”的引用 对“glBegin”的未定义引用 未定义对“glVertex3d”的引用 未定义对“glEnd”的引用 等等……

我很确定我的源代码没有任何问题,因为它是提供给我们的示例代码。

我包含的标题:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>

我该如何解决这个问题?

仅供参考:我在 ubuntu 上编译这个

【问题讨论】:

    标签: c linux ubuntu opengl makefile


    【解决方案1】:

    你的问题出在这里:

    my3DTest: clean $(OBJS)
        LDOPTS=\
        cc -o my3DTest $(CFLAGS) $(OBJS) $(LIBPATH) $(LIBS)
    

    由于反斜杠(\),变量 LDOPTS 分配继续到下一行,因此您的 cc 命令仅分配给该变量。一旦完成,make 继续使用其标准的隐式目标规则来构建二进制文件。但是由于您没有在 make 将用于该隐式规则的变量中指定链接器选项,因此它将尝试在没有这些变量的情况下进行链接。


    Makefile,假设源文件是名称vlucht.c

    重要提示: 缩进和空格在 Makefile 中确实很重要。不正确的缩进会损坏 Makefile!

    LDLIBS = -lglut -lGLU -lGL -lXt -lXext -lm
    EXE  = vlucht
    OBJS = vlucht.o
    
    .PHONY: clean
    
    all: $(EXE)
    
    $(EXE): $(OBJS)
    
    clean:
        -$(RM) -f $(EXE) $(OBJS)
    

    【讨论】:

    • 那你有什么建议?我应该删除反斜杠吗?因为奇怪的是,以前的代码段工作得很好..
    • @privetDruzia:首先我建议您了解 Makefile 的工作原理和 makefile 语法。我建议删除 `LDOPTS=` 这一行,因为它的意义为零。
    • 好的,感谢您的批评...我删除了 LDOPTS,没有解决任何问题。所以我有一个问题,你对我的问题的回答“只是去学习”,你没有解决我的问题,非常有用......
    • @privetDruzia:我不想粗鲁,但我看到的问题是,你只是从各种来源复制'n'粘贴你的 Makefile,而没有真正理解发生了什么。您的链接器问题也是如此。事实上,您的具体问题已在 StackOverflow 上被问过无数次,您的特殊风格只是将 Makefile 添加到混合中。例如,您的 Makefile 在错误的位置有 CFLAGS 变量扩展(它属于编译阶段,而不是链接阶段)。传递给链接器的库的顺序很重要。
    • @privetDruzia:查看我的答案更新。我添加了一个固定的 Makefile,它将完成工作(假设您的源文件名称为 vlucht.c),您可以根据需要重命名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 2011-10-14
    • 2023-03-26
    相关资源
    最近更新 更多