我正在用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”部分放在不同的订单中,但没有任何效果。我安装了所有三个库并正在运行。 我很感激你的帮助。
答案 0 :(得分:1)
所以问题是使用-m32标志需要32位库。对于那些我非常感激的人,谁回答我的建议,我应该安装库,只有32位版本。
libglu1-mesa-dev:i386
libgl1-mesa-dev:i386
freeglut3-dev:i386
对于那些可以使用此答案的人,请记住安装i386软件包,删除amd64,反之亦然。因此,不要忘记使用:amd64
说明符重新安装该包。
答案 1 :(得分:0)
Makefiles可能有点神秘,有点挑剔,并且有很多伏都教围绕如何写它们。这是一个更合理,固定的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
程序可能已安装。