繁体   English   中英

无法在makefile中链接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说明符重新安装该软件包。

Makefile可能有点不可思议,有些难以理解,而且编写方法很多。 这是一个更合理的,固定的makefile:

# 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程序可能已经安装。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM