【问题标题】:Linker won't find -lglut链接器找不到 -lglut
【发布时间】:2011-12-28 04:45:52
【问题描述】:

所以。

我对 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

感谢您的帮助。

【问题讨论】:

  • 您正在使用 -m32 进行编译以构建 32 位版本,但看起来您的 /usr/lib/libglut.so(和其他 glut 库)是 64 位库?运行命令file /usr/lib/libglut.so查看。

标签: c++ compilation makefile


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    /usr/bin/ld: 搜索 -lglut 时跳过不兼容的 /usr/lib/libglut.so

    这意味着 ld 找到了 libglut.so,但它不是 -m32 目标的好候选。

    PS,BIN是一个目录,为什么要放到compile object中?

    $(CC) $(LIBS) $(INCLUDEPATH) $(CFLAGS) -o $(TARGET)  $(DEPS) $(BIN)
    

    【讨论】:

    • 我认为这就是将它移动到我的 bin 文件夹中所需要的。还有其他方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多