C++新手首次编译Demo时g++报undefined reference错误
问题解决方法
你遇到的是链接阶段错误,错误原因和解决方案如下:
错误根因
- 你执行的编译命令
g++ main.cpp仅编译了main.cpp单个源文件,mesh()函数的实现代码在mesh.cpp中,链接器无法找到对应函数的实现,因此抛出undefined reference报错 - 额外你
main.cpp中存在语法错误:argv[0] = "main" argv[1] = "buffer.obj"两行代码之间缺少分号分隔,也会导致编译失败
解决方案
步骤1:修复代码语法错误
修改main.cpp中的错误行,补充分号:
// 修改前(错误) argv[0] = "main" argv[1] = "buffer.obj" // 修改后(正确) argv[0] = "main"; argv[1] = "buffer.obj";
额外提示:如果程序运行时没有传入参数,argv[1]本身是空指针,直接赋值属于非法内存操作,可能触发运行崩溃,测试阶段可以直接删除这两行,直接使用你定义的filename变量即可
步骤2:使用正确的编译命令
编译时需要把所有用到的源文件都加入编译指令,让编译器完成全部源文件的编译和链接:
g++ main.cpp mesh.cpp -o main
步骤3:运行生成的可执行文件
编译无报错后执行以下命令运行程序:
./main
额外优化建议
- 给
mesh.h添加头文件保护,避免重复包含报错,可在mesh.h最顶部添加#pragma once - 不要在头文件中使用
using namespace std,避免引入全局命名空间污染,建议只在cpp实现文件中按需使用
内容的提问来源于stack exchange,提问作者jack tsang
相关产品推荐
相关产品推荐

