无法在生成文件中链接 opengl 库
Can't link opengl libraries in makefile
我正在用 Cpp + x86 汇编编写一个混合程序。该项目由 3 个文件组成:main.cc、data.cc 和 a_t.asm。我被困在一个makefile(我是一个完全的初学者)部分。它看起来像这样:
CC=gcc
ASMBIN=nasm
CFLAGS=-m32 -Wall
all: main.o a_t.o
$(CC) -m32 main.o a_t.o -lGL -lGLU -lglut
a_t.o:
$(ASMBIN) -f elf a_t.asm
main.o: main.cc data.cc
$(CC) $(CFLAGS) -g main.cc
clean:
rm -rf *o main
根据make命令,我得到以下内容:
gcc -m32 main.o a_t.o -lGL -lGLU -lglut
/usr/bin/ld: cannot find -lGL
/usr/bin/ld: cannot find -lGLU
/usr/bin/ld: cannot find -lglut
collect2: error: ld returned 1 exit status
make: *** [all] Error 1
我尝试将"-lGL -lGLU -lglut"部分按不同的顺序排列,但没有任何效果。我已经安装了所有三个库并正常工作。我将不胜感激你的帮助。
所以问题是使用 -m32 标志需要 32 位库。正如我非常感谢的两个人所建议的那样,我应该安装库,只有它们的 32 位版本。
libglu1-mesa-dev:i386
libgl1-mesa-dev:i386
freeglut3-dev:i386
对于那些可以使用此答案的人,请记住,安装 i386 软件包会删除 amd64,反之亦然。因此,不要忘记使用:amd64
说明符重新安装该软件包。
Makefiles可能有点晦涩难懂,有点挑剔,而且有很多关于如何编写它们的巫毒教。 这是一个更合理、更固定的生成文件:
# Don't set CC=gcc, because it's not 1995 any more.
ASMBIN = nasm
# CFLAGS is for C, CXXFLAGS is for C++
# Also, let's put -g here
CXXFLAGS = -m32 -Wall -g
LDFLAGS = -m32
# Use pkg-config wherever possible
opengl_libs := -lglut $(shell pkg-config --libs gl glu)
opengl_cflags := $(shell pkg-config --cflags gl glu)
all: main
main: main.o a_t.o
# Order of flags is important here!
# We also have to use CXX instead of CC to avoid linker errors.
$(CXX) $(LDFLAGS) -o $@ $^ $(opengl_libs)
a_t.o:
$(ASMBIN) -f elf a_t.asm
main.o: main.cc data.cc
# Don't forget -c and -o
$(CXX) $(CXXFLAGS) $(opengl_cflags) -c $< -o $@
clean:
# Should be *.o, not *o
rm -rf *.o main
.PHONY: all clean
但是,这可能无法解决您遇到的错误。 您需要记住安装 OpenGL 库的开发版本。 在基于 Debian 的系统上,这意味着安装以下软件包(当然是 i386):
-
libglu1-mesa-dev
-
libgl1-mesa-dev
-
freeglut3-dev
.
pkg-config
程序可能已安装。
相关文章:
- 如何在 debian 下正确链接一个 opengl 程序?
- 在 CLion (MacOS) 中使用 OpenGL 和 GLUT 库时出现链接错误
- OpenGL 程序无法链接?
- 使用 CMake 在 Mac 上链接静态 GLFW 和 OpenGL
- 链接 openGL 库失败,因为它无法打开 libgl.so ...但它就在那里
- OpenGL 程序着色器链接错误
- 如何使用CMAKE在Mac上链接与OpenGL相关的库
- OpenGL 着色器链接错误,没有错误消息
- 无法在生成文件中链接 opengl 库
- OpenGL GLut 与 Windows 8 64 位上的 Visual Studio 2013 链接问题
- OpenGL SDL链接错误
- Ubuntu 13.10 C++ OpenGL GLUT - 链接问题 - 未定义对"glClearColor"的引用
- MinGW-w64 OpenGL 链接器错误
- 非官方OpenGL SDK链接问题-未定义引用
- OpenGL GLX_EXT_swap_control存在,但无法链接函数
- OpenGL 着色器拒绝链接
- 不支持 GLSL 3.30;与未编译的着色器链接;OpenGL
- 在Windows x86_64上使用MinGW链接OpenGL
- 如何在fedora/linux-gcc++上链接OpenGL/glew/glfw
- 在OSX上链接OpenGL框架