簡體   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