c - OpenGL 问题 : 'incompatible' vs 'cannot find'

标签 c opengl gcc makefile ubuntu-14.04

我正在尝试 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/

相关文章:

c++ - 来自捕获的 PCM 样本数据的 WAV 文件

opengl - 检查 OpenGL 资源泄漏

opengl - 方差阴影贴图矩如何落入切比雪夫不等式

Linux:弱链接整个库,如 OS X ld -weak-lfoo

c - 在linux中获取文件的最后修改时间

c - 我的 "Vigenere CS 50"项目运行不正常

c - 难以理解循环

iphone - PVR Texture Compression Tiling(暴露边缘上下文)

c++ - unique_ptr 编译错误

c++ - 何时以及如何使用 GCC 的堆栈保护功能?