c++ - 链接器找不到 -lglut

标签 c++ compilation makefile

所以。

我对 Linux 开发世界有点陌生(没有 IDE),所以请耐心等待。

问题

我构建了一个 make 文件,它将大约 7-8 个文件编译为 .o 文件,然后将这些文件与一些库链接在一起。我已经对这些库进行了定位,并且它们的开发对应物确实存在。问题是链接器拒绝找到它们。我的输出(如果我正确地阅读了此内容)告诉我它正在寻找错误的区域。我已导出 LD_PATH 以包含 /usr/lib,这是我的 .so. 文件所在的位置。我的主要问题是,如何让 -lglew-lglut 相互链接?我还想将我的 .o 文件放在我的 obj 文件夹中,并将我的二进制文件放在 bin 文件夹中。这可以在 makefile 中实现吗?如果是这样,给定我的 make 文件,执行此操作的最佳方法是什么?

Makefile

  1 BIN = bin/
  2 OBJ = obj/
  3 TARGET = opengl_03
  4 DEPS = main.o  displayinit.o initializer.o algorithms.o matrix3f.o window.o vertex3.o
  5 CC = g++
  6 CFLAGS = -g -m32
  7 LIBS = -lglut -lGLEW
  8 INCLUDEPATH = -L/usr/include/ -L/usr/lib
  9 
 10 $(TARGET) : $(DEPS)
 11     $(CC) $(LIBS) $(INCLUDEPATH) $(CFLAGS) -o $(TARGET)  $(DEPS) $(BIN)
 12 
 13 displayinit.o : displayinit.cpp displayinit.h
 14     $(CC) -c displayinit.cpp $(OBJ)
 15 initializer.o : initializer.cpp initializer.h
 16     $(CC) -c initializer.cpp $(OBJ)
 17 algorithms.o : algorithms.cpp algorithms.h
 18     $(CC) -c algorithms.cpp $(OBJ)
 19 matrix3f.o : matrix3f.cpp matrix3f.h
 20     $(CC) -c matrix3f.cpp $(OBJ)
 21 vertex3.o : vertex3.cpp vertex3.h
 22     $(CC) -c vertex3.cpp $(OBJ)
 23 window.o : window.cpp window.h
 24     $(CC) -c window.cpp $(OBJ)
 25 main.o : main.cpp
 26     $(CC) -c main.cpp $(OBJ)
 27 
 28 clean:
 29     rm $(DEPS) 
 30 
 31 

输出

g++ -lglut -lGLEW  -L/usr/include/ -L/usr/lib -g -m32  -o opengl_03  main.o  displayinit.o initializer.o algorithms.o matrix3f.o window.o vertex3.o bin/
/usr/bin/ld: skipping incompatible /usr/lib/libglut.so when searching for -lglut
/usr/bin/ld: skipping incompatible /usr/lib/libglut.a when searching for -lglut
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../libglut.so when searching for -lglut
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../libglut.a when searching for -lglut
/usr/bin/ld: skipping incompatible /usr/lib/libglut.so when searching for -lglut
/usr/bin/ld: skipping incompatible /usr/lib/libglut.a when searching for -lglut
/usr/bin/ld: cannot find -lglut
/usr/bin/ld: cannot find -lGLEW
/usr/bin/ld: cannot find bin/: File format not recognized
collect2: ld returned 1 exit status
make: *** [opengl_03] Error 1

非常感谢您的帮助。

最佳答案

您使用的是哪种 Linux?看起来您正在使用 64 位系统,但尝试编译 32 位应用程序(因为 -m32 编译器开关)。因此,要么删除 -m32,要么安装 32 位开发库。它们可能被命名为 freeglut-32bit 或类似的名称。

关于c++ - 链接器找不到 -lglut,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8651961/

相关文章:

C#从文件中加载数据并排序到数组中

c++ - 如何从文件中读取文本行并将它们放入数组中

c++ - 如何使 Visual Studio 在为一个配置编译时忽略某些代码行,但在其他配置中不忽略

python - 如何一键运行Python脚本?

java - 找不到符号(它在那里......)

c++ - Make 始终针对目标 "all"运行,即使没有任何更新

c++ - 如何以像素(/逻辑单位)为单位获取字符串的宽度?

c - makefile 缺少分隔符但不是制表符问题

makefile - 依赖于 make 中的远程文件

c - 使用 flex-lexer 和 cmake 构建错误