ubuntu下makefile出现“未定义引用错误”

吴一奇 2015-01-07 12:59:16
大家好,我想把我在windows7上的一个程序编译成能linux下的可执行程序。其实我已经在ubuntu codeblocks上编译运行成功了。只是现在想自己写一下makefile文件。
1.我的工程是这样的:

2.这是我的makefile文件:

objects = main.o glm.o model3d.o stla_io.o
MeshCmp : $(objects)
gcc -o MeshCmp $(objects)
main.o : glm.h edge.h vec3.h model3d.h
glm.o : glm.h
model3d.o : model3d.h bmpwriter.h
stla_io.o : stla_io.h
#edge.o : edge.h
#face.o : face.h
#vertex.o : vertex.h
.PHONY : clean
clean :
rm MeshCmp $(objects)


3.这是出错信息:

string不是标准库的东西吗,为什么会出现“未定义引用”的错误啊?感觉是不是少引用什么文件了?还是makefile文件有误?可是在codeblocks下是可以正常运行的啊?
先谢谢大家!
...全文
3840 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
花火后的天空 2015-08-18
  • 打赏
  • 举报
回复
奔跑的路 2015-01-15
  • 打赏
  • 举报
回复
引用 8 楼 wu_nan_nan 的回复:
[quote=引用 5 楼 lee244868149 的回复:] 刚刚查了一下关于glulookat,它是openGL库里面的函数,首先要确定你安装好了这个库,然后在编译的时候需要将这个库链接进来。以下是一个典型的用C/C++编写的OpenGL程序的编译命令,适合几乎所有的OpenGL程序: cc application.c -o application -lglew -lgl -lglu -lglut -lm -lx11 比如这里报错是在编译model3d.o出错的,所以在Makefile中改一下: g++ model3d.cpp -o model3d.o -lglew -lgl -lglu -lglut -lm -lx11 链接库的路径可能会有差异,取决于用户的软件安装路径。比如一个典型的路径是: -L/usr/X11R6/lib 可以添加到后面 至于怎么链接库可以参考一下这里http://blog.csdn.net/lee244868149/article/details/38707127
谢谢你,你的思路是对的。最后我参考了另一个开源项目的makefile,稍作修改就可以用了。这是我改后的makefile:
CXX    = g++
TARGET = MeshCmp #可执行程序名,任意给
LIBS_GL = -lglut -lGL -lGLU	
OBJS = main.o \
	glm.o \
	stla_io.o \
	model3d.o 

all: $(TARGET)
					
$(TARGET): $(OBJS) 
	$(CXX) -o $@ $(OBJS) $(LIBS_GL)

.PHONY : clean
clean:
	-rm -f $(OBJS)
.cpp.o:
	$(CXX)  -c $<
 
[/quote] 问题解决,可以结贴了
吴一奇 2015-01-13
  • 打赏
  • 举报
回复
引用 7 楼 zhxianbin 的回复:
makefile 一般不是这么写的,看一下 《跟我一起写 Makefile 》吧
我已经在看了,谢谢你。
吴一奇 2015-01-13
  • 打赏
  • 举报
回复
引用 5 楼 lee244868149 的回复:
刚刚查了一下关于glulookat,它是openGL库里面的函数,首先要确定你安装好了这个库,然后在编译的时候需要将这个库链接进来。以下是一个典型的用C/C++编写的OpenGL程序的编译命令,适合几乎所有的OpenGL程序: cc application.c -o application -lglew -lgl -lglu -lglut -lm -lx11 比如这里报错是在编译model3d.o出错的,所以在Makefile中改一下: g++ model3d.cpp -o model3d.o -lglew -lgl -lglu -lglut -lm -lx11 链接库的路径可能会有差异,取决于用户的软件安装路径。比如一个典型的路径是: -L/usr/X11R6/lib 可以添加到后面 至于怎么链接库可以参考一下这里http://blog.csdn.net/lee244868149/article/details/38707127
谢谢你,你的思路是对的。最后我参考了另一个开源项目的makefile,稍作修改就可以用了。这是我改后的makefile:
CXX    = g++
TARGET = MeshCmp #可执行程序名,任意给
LIBS_GL = -lglut -lGL -lGLU	
OBJS = main.o \
	glm.o \
	stla_io.o \
	model3d.o 

all: $(TARGET)
					
$(TARGET): $(OBJS) 
	$(CXX) -o $@ $(OBJS) $(LIBS_GL)

.PHONY : clean
clean:
	-rm -f $(OBJS)
.cpp.o:
	$(CXX)  -c $<
 
zhxianbin 2015-01-07
  • 打赏
  • 举报
回复
makefile 一般不是这么写的,看一下 《跟我一起写 Makefile 》吧
奔跑的路 2015-01-07
  • 打赏
  • 举报
回复
一点修改,参考一下,未必能用
objects = main.o glm.o model3d.o stla_io.o
MeshCmp : $(objects)
    g++ -o MeshCmp $(objects)
main.o :    main.cpp 
    g++ main.cpp -o main.o
glm.o :  Headers/glm.h glm.cpp 
    g++  glm.cpp -o glm.o
model3d.o :  Headers/model3d.h  Headers/bmpwriter.h model3d.cpp
    g++ model3d.cpp -o model3d.o
stla_io.o : Headers/stla_io.h  stla_io.cpp
    g++ stla_io.cpp -o stla_io.o
#edge.o : edge.h
#face.o : face.h
#vertex.o : vertex.h
.PHONY : clean
clean :
    rm MeshCmp $(objects) 
zuxi 2015-01-07
  • 打赏
  • 举报
回复
C++得用g++
iasky 2015-01-07
  • 打赏
  • 举报
回复
没有安装STD库吧。
奔跑的路 2015-01-07
  • 打赏
  • 举报
回复
这里是安装openGL库的介绍,如果确定没有安装这个库,可以参考一下 http://blog.csdn.net/tju355/article/details/7614197
奔跑的路 2015-01-07
  • 打赏
  • 举报
回复
刚刚查了一下关于glulookat,它是openGL库里面的函数,首先要确定你安装好了这个库,然后在编译的时候需要将这个库链接进来。以下是一个典型的用C/C++编写的OpenGL程序的编译命令,适合几乎所有的OpenGL程序: cc application.c -o application -lglew -lgl -lglu -lglut -lm -lx11 比如这里报错是在编译model3d.o出错的,所以在Makefile中改一下: g++ model3d.cpp -o model3d.o -lglew -lgl -lglu -lglut -lm -lx11 链接库的路径可能会有差异,取决于用户的软件安装路径。比如一个典型的路径是: -L/usr/X11R6/lib 可以添加到后面 至于怎么链接库可以参考一下这里http://blog.csdn.net/lee244868149/article/details/38707127
吴一奇 2015-01-07
  • 打赏
  • 举报
回复
引用 3 楼 lee244868149 的回复:
一点修改,参考一下,未必能用
objects = main.o glm.o model3d.o stla_io.o
MeshCmp : $(objects)
g++ -o MeshCmp $(objects)
main.o : main.cpp
g++ main.cpp -o main.o
glm.o : Headers/glm.h glm.cpp
g++ glm.cpp -o glm.o
model3d.o : Headers/model3d.h Headers/bmpwriter.h model3d.cpp
g++ model3d.cpp -o model3d.o
stla_io.o : Headers/stla_io.h stla_io.cpp
g++ stla_io.cpp -o stla_io.o
#edge.o : edge.h
#face.o : face.h
#vertex.o : vertex.h
.PHONY : clean
clean :
rm MeshCmp $(objects)


谢谢,可以用。不过还有个问题,我开发的是opengl程序,所以还报错对‘gluLookAt’未定义的引用,应该是需要链接动态库(或者静态库?)。不知道怎么链接?十分感谢!下图是报错截图:

23,223

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧