我正在尝试 a program关于 blender 变形。我的笔记本电脑是 amd64 并且能够支持 i386。
faye@fish:/usr/bin$ dpkg --print-foreign-architectures
i386
faye@fish:/usr/bin$ dpkg --print-architecture
amd64
我对 makefile 脚本没有太多经验。根据google搜索信息,我在makefile.mk中添加了两行代码。
# -I option to help the compiler finding the headers
CFLAGS += $(addprefix -I, $(INCLUDE_PATH))
CC=gcc -m32
问题来了: 当我运行任何模板 OpenGL 代码时:
gcc test.c -lm -lpthread -lglut -lGL -lGLU -o test
看起来代码和库工作正常。
但是,如果我对 makefile.mk(CC=gcc) 执行相同的操作,它会以下列形式给出许多错误:
/usr/bin/ld: i386 architecture of input file `../external/lib/libxxxxxxxx.a(xxxxxxxx.o)' is incompatible with i386:x86-64 output
如果我使用 (CC = gcc -m32),错误将切换为:
/usr/bin/ld: cannot find -lglut
/usr/bin/ld: cannot find -lGL
/usr/bin/ld: cannot find -lGLU
我想在运行 32 位应用程序和库链接的 64 位操作系统中可能存在问题?
最佳答案
-m32
,当与 x86-64 编译器一起使用时,并不意味着“为 i386 编译此程序”,而是实际上意味着“仅使用在其上运行的指令为 x86-64 CPU 创建程序32位寄存器”。
你所拥有的是一些为 native i386 编译的二进制文件,现在尝试将它与一个为 x86-64 编译的程序结合起来,只有 32 位寄存器。这两个不适合在一起。这里最大的问题当然是,你为什么要使用那些 i386 二进制文件。使用 32bit-x86-64 有一些很好的理由(指针大小的一半,可以大大减少内存带宽),但通常你需要 64 位二进制文件。由于拥有大量的地址空间,32 位内存管理的许多问题都消失了。
关于c - OpenGL 问题 : 'incompatible' vs 'cannot find' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38572156/