C++ 错误:对“<func name>”的未定义引用和 ld 返回 1 个退出状态 [重复]

Posted

技术标签:

【中文标题】C++ 错误:对“<func name>”的未定义引用和 ld 返回 1 个退出状态 [重复]【英文标题】:C++ Error: Undefined reference to "<func name>" and ld returned 1 exit status [duplicate] 【发布时间】:2020-01-11 16:35:11 【问题描述】:

我创建了一个 OpenGL 项目来绘制形状。但是,当我尝试编译程序时,会出现一些错误。 以下是 Shapes.h 的内容:

#ifndef SHAPES_INCLUDE
#define SHAPES_INCLUDE
void Triangle(int x1, int y1, int x2, int y2, int x3, int y3 , float r, float g, float b);

#endif


这是“Shapes.cpp”的内容:

#include "Shapes.h"
#include <GL/glx.h>    
#include <GL/gl.h>
#include <GL/glut.h>

void Triangle(int x1, int y1, int x2, int y2, int x3, int y3 , float r, float g, float b)

    glColor3f(r,g,b);
        glBegin(GL_TRIANGLES);
            glVertex2i(x1,y1);
            glVertex2i(x2,y2);
            glVertex2i(x3,y3);
    glEnd();

作为参考,这里是我的“main.cpp”的内容:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <GL/glx.h>    
#include <GL/gl.h>
#include <GL/glut.h>

// our libraries:

#include "libraries/Shapes.h"

void init()

    glClearColor(1.0,1.0,1.0,0.0);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0.0,200.0,0.0,150.0);
 

 void lineSegment()
 
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0.0,0.0,1.0);
        glBegin(GL_TRIANGLES);
            glVertex2i(20,120);
            glVertex2i(40,20);
            glVertex2i(80,20);
        glEnd();
    glFlush();
 

 void glLoop()
 
     Triangle(20,120,40,20,80,20,0.0,0.0,1.0);
     glFlush();
 

 int main(int argc, char**argv)
 
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
    glutInitWindowPosition(50,100);
    glutInitWindowSize(400,300);
    glutCreateWindow("OpenGL window");
    init();
    glutDisplayFunc(glLoop);
    glutMainLoop();
    return 0;
 

当我用g++ main.cpp -lGL -lGLU -lglut 编译它时,我得到了这个错误:

/tmp/ccSGyfe8.o: In function `glLoop()':
main.cpp:(.text+0xf3): undefined reference to `Triangle(int, int, int, int, int, int, float, float, float)'
collect2: error: ld returned 1 exit status

谁能帮我解决它?

【问题讨论】:

g++ main.cpp Shapes.cpp -lGL -lGLU -lglut。或者,首先将.cpp 编译为.o(目标文件),然后链接它们。 【参考方案1】:

您没有链接包含Triangle 定义的目标文件。

【讨论】:

以上是关于C++ 错误:对“<func name>”的未定义引用和 ld 返回 1 个退出状态 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

分段错误:核心转储 C++ 向量对字符串:

C++ 编译器错误:对重载函数的模糊调用

对向量进行冒泡排序的 C++ 长度错误

对函数错误的未定义引用,同时使用 C 和 C++

在 C++ 中对对进行排序时出现内存错误

分段错误:C++ 使用 lambda 比较器对字符串向量进行排序