OSX:找不到架构 i386 的符号

Posted

技术标签:

【中文标题】OSX:找不到架构 i386 的符号【英文标题】:OSX : Symbols not found for architecture i386 【发布时间】:2013-05-19 00:17:45 【问题描述】:

我有以下使用 C++ 和 OpenGL 的 makefile。它正在编译,所以我添加了 -m32 行以尝试让它在 x86_64 中编译。现在我得到了同样的错误,但它说的是 i386。

我该怎么做才能编译这个程序?

我正在运行 OSX 10.8,以防万一。

谢谢大家。

.SUFFIXES: .cpp


#Change the following two lines to reflect the locations
# of the GLUT library (.a) and includes on your system

#TOP = /pool/u/class/cs520/Mesa-7.0.3
CFLAGS  = -w -s -O2 -ansi -DSHM
XLIBS   = -lX11 -lXext -lXmu -lXext -lXmu -lXt -lXi -lSM -lICE
LIBS    = -lglut -lGLU -lGL 
#INCLS   = -I/usr/X11R/include -I/share/mesa/include   #-I$(TOP)/include
INCLS   = -I/usr/X11R6/include -I/usr/X11/include/GL
LIBDIR  = -L/usr/X11/lib -L/usr/X11R6/lib #-L$(TOP)/lib 

#GLUT_LIB_LOCATION=/usr/X11R6/lib
#GLUT_INC_LOCATION=/usr/X11R6/include

#CC=gcc
CC=g++
#CPPFLAGS=-I$GLUT_INC_LOCATION #-w 
#GLLIBS=-L$GLUT_LIB_LOCATION -lglut -lGL -lGLU
#LPATH=$GLUTPATH 
INCS= 

libs =     $GLLIBS   -lm  

All: terrain 

terrain: tg.o tga.o terrain.o 
    $(CC)   $(LPATH) tg.o tga.o terrain.o  -m32 ./glui/libglui.a $(libs) -o terrain  $(LIBDIR) $(LIBS) $(XLIBS)

.cpp.o:
    $(CC) -c -D_LINUX_ $(INCS) $*.cpp $(INCLS)

clean:
    rm *.o

tg.o: tg.cpp terrain.h tga.h glui.h 
tga.o: tga.cpp tga.h
terrain.o : terrain.cpp terrain.h

我收到以下错误。

g++ -c -D_LINUX_  tga.cpp -I/usr/X11R6/include -I/usr/X11/include/GL
g++ -c -D_LINUX_  terrain.cpp -I/usr/X11R6/include -I/usr/X11/include/GL
g++    tg.o tga.o terrain.o  -m32 ./glui/libglui.a    -lm   -o terrain  -L/usr/X11/lib -L/usr/X11R6/lib  -lglut -lGLU -lGL  -lX11 -lXext -lXmu -lXext -lXmu -lXt -lXi -lSM -lICE
ld: warning: ld: warning: ld: warning: ignoring file tg.o, file was built for unsupported file format ( 0xcf 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 1 0x 3 0x 0 0x 0 0x 0 0x 1 0x 0 0x 0 0x 0 ) which is not the architecture being linked (i386): tg.oignoring file terrain.o, file was built for unsupported file format ( 0xcf 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 1 0x 3 0x 0 0x 0 0x 0 0x 1 0x 0 0x 0 0x 0 ) which is not the architecture being linked (i386): terrain.oignoring file tga.o, file was built for unsupported file format ( 0xcf 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 1 0x 3 0x 0 0x 0 0x 0 0x 1 0x 0 0x 0 0x 0 ) which is not the architecture being linked (i386): tga.o


ld: warning: ignoring file ./glui/libglui.a, file was built for archive which is not the architecture being linked (i386): ./glui/libglui.a
Undefined symbols for architecture i386:
  "_main", referenced from:
      start in crt1.10.6.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
make: *** [terrain] Error 1

【问题讨论】:

"lipo -info path/to/libglui.a" 应该告诉你是否实际包含 i386 和 x86。在我看来,这些库之一不是.. 我收到了这个lipo: archive with no architecture specification: libglui.a (can't determine architecture for it) 也许它只是用于动态库和可执行文件... 【参考方案1】:

您正在为 MacOS X 编译,所以不要使用 X11,而是使用原生 OpenGL 框架;编译器/链接器选项是-framework OpenGL

并且您遇到的错误源于您可能使用了预编译库文件,甚至没有为您的特定版本的 MacOS X 编译,即使是 MacOS X。没有编译器开关可以帮助你。

【讨论】:

以上是关于OSX:找不到架构 i386 的符号的主要内容,如果未能解决你的问题,请参考以下文章

在 OSX 上使用 MySQLdb 的问题:找不到符号 _mysql_affected_rows

在 Lion 上安装 MySQLdb 时遇到困难 - 导入找不到模块

Xcode 8:找不到用于 pod 的架构 arm64 的符号

在架构 + 链接器命令中找不到符号失败,退出代码为 1

找不到 dyld 符号,但 nm 报告其他情况(OS X 更新问题)

Mac上的Qt说找不到架构x86_64的符号[重复]