[英]Why can't i properly link opengl libraries? (Windows, mingw, command line)
[英]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.