【问题标题】:ld: symbol(s) not found when linkingld:链接时找不到符号
【发布时间】:2011-04-11 20:29:07
【问题描述】:

我试图在我的 Mac OSX 10.6 上编译“Loch”但没有任何成功。我总是收到一些“编译时找不到符号”错误。有人知道可能是什么问题吗?

非常感谢

c++ -o loch -Wall getline.o lxTR.o lxOGLFT.o lxSetup.o lxRender.o lxWX.o lxImgIO.o lxLRUD.o lxFile.o lxSTree.o lxData.o lxMath.o lxSView.o lxSScene.o lxGUI.o lxGLC.o lxOptDlg.o lxAboutDlg.o img.o -lz -L/usr/X11R6/lib              -framework IOKit -framework Carbon -framework Cocoa -framework System -framework QuickTime -framework OpenGL -framework AGL  -lwx_macud_gl-2.8 -lwx_macud-2.8  -L/Applications/VTK_All/VTK_Bin/lib/vtk-5.4 -lvtkHybrid -lvtkImaging -lvtkIO -lvtkGraphics -lvtkFiltering -lvtkCommon -lvtkjpeg -lvtkpng -lvtkzlib -lvtksys -lfreetype -lGLU -lGL 
ld: warning: in /System/Library/Frameworks//QuickTime.framework/QuickTime, missing required architecture x86_64 in file
ld: warning: in /usr/lib/libwx_macud_gl-2.8.dylib, missing required architecture x86_64 in file
ld: warning: in /usr/lib/libwx_macud-2.8.dylib, missing required architecture x86_64 in file

  "wxGetTopLevelParent(wxWindow*)", referenced from:
      wxTopLevelWindowBase::IsActive()      in lxRender.o
      wxTopLevelWindowBase::IsActive()      in lxSTree.o
      wxTopLevelWindowBase::IsActive()      in lxSView.o
      wxTopLevelWindowBase::IsActive()      in lxSScene.o
      wxTopLevelWindowBase::IsActive()      in lxGUI.o
      wxTopLevelWindowBase::IsActive()      in lxOptDlg.o
      wxTopLevelWindowBase::IsActive()      in lxAboutDlg.o
  "wxWindowBase::SetVirtualSizeHints(int, int, int, int)", referenced from:
      vtable for lxRenderDataConfigin lxRender.o
      vtable for wxStaticTextBasein lxRender.o
      vtable for wxCheckBoxBasein lxRender.o
      vtable for wxButtonBasein lxRender.o
      vtable for lxModelTreeDlgin lxSTree.o
      vtable for wxButtonBasein lxSTree.o
      vtable for lxViewpointSetupDlgin lxSView.o
      vtable for wxSliderBasein lxSView.o
      vtable for wxCheckBoxBasein lxSView.o
      vtable for wxStaticTextBasein lxSView.o
      vtable for wxButtonBasein lxSView.o
      vtable for lxModelSetupDlgin lxSScene.o
      vtable for wxSliderBasein lxSScene.o
      vtable for wxStaticLineBasein lxSScene.o
      vtable for wxCheckBoxBasein lxSScene.o
      vtable for wxStaticTextBasein lxSScene.o
      vtable for wxButtonBasein lxSScene.o
      vtable for lxFramein lxGUI.o
      vtable for lxGLCanvasin lxGLC.o
      vtable for lxOptionsDlgin lxOptDlg.o
      vtable for wxDirDialogBasein lxOptDlg.o
      vtable for wxStaticTextBasein lxOptDlg.o
      vtable for wxButtonBasein lxOptDlg.o
      vtable for lxAboutDlgin lxAboutDlg.o
      vtable for wxStaticTextBasein lxAboutDlg.o
  "typeinfo for wxGLCanvas", referenced from:
      typeinfo for lxGLCanvasin lxGLC.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [loch] Error 1

我使用下面的 Makefile

# common therion objects
CMNOBJECTS = \
  lxTR.o lxOGLFT.o lxSetup.o lxRender.o lxWX.o \
  lxImgIO.o lxLRUD.o lxFile.o lxSTree.o \
  lxData.o lxMath.o lxSView.o lxSScene.o \
  lxGUI.o lxGLC.o lxOptDlg.o lxAboutDlg.o \
  img.o

VTKVERSION = 5.4
VTKLIBS = -lvtkHybrid -lvtkImaging -lvtkIO -lvtkGraphics -lvtkFiltering -lvtkCommon -lvtkjpeg -lvtkpng -lvtkzlib -lvtksys -lfreetype
POSTMAKE =
STRIPFLAG = -s 

# PLATFORM CONFIG

# PLATFORM MACOSX
  CXX = c++
  CC = cc
  VTKPATH = /Applications/VTK_All/VTK_Bin
  VTKINCLUDEPATH = $(VTKPATH)/include/vtk-5.4
  VTKLIBPATH = $(VTKPATH)/lib/vtk-5.4
  VTKLIBS = -lvtkHybrid -lvtkImaging -lvtkIO -lvtkGraphics -lvtkFiltering -lvtkCommon -lvtkjpeg -lvtkpng -lvtkzlib -lvtksys -lfreetype -lGLU -lGL
  POBJECTS = getline.o
  CXXPFLAGS = -W -Wall -DLXMACOSX $(shell wx-config --cxxflags) -I$(VTKINCLUDEPATH) -Wno-deprecated -I/usr/X11R6/include -I/usr/X11R6/include/freetype2
  CCPFLAGS = -W -Wall -DLXMACOSX $(shell wx-config --cflags) -I/usr/X11R6/include
  LXLIBDIR = 
  PLIBS = -lz -L/usr/X11R6/lib $(shell wx-config --libs gl) -L$(VTKLIBPATH) $(VTKLIBS)
  POSTMAKE = cp -f ./loch ./loch.app/Contents/MacOS
  STRIPFLAG =
# PLATFORM ENDCONFIG


# BUILD CONFIG

# BUILD OZONE
##CCBFLAGS = -O3
##CXXBFLAGS = -O3
##LDBFLAGS = $(STRIPFLAG)

# BUILD OXYGEN
CCBFLAGS = -O2
CXXBFLAGS = -O2
LDBFLAGS = $(STRIPFLAG)

# BUILD RELEASE
##CCBFLAGS = 
##CXXBFLAGS = 
##LDBFLAGS = $(STRIPFLAG)

# BUILD DEBUG
##CCBFLAGS = -ggdb
##CXXBFLAGS = -ggdb -DLXDEBUG
##LDBFLAGS = 

# BUILD ENDCONFIG


# compiler settings
CXXFLAGS = -Wall -D_GNU_SOURCE -DLOCH $(CXXPFLAGS) $(CXXBFLAGS)
CCFLAGS = -Wall -D_GNU_SOURCE -DLOCH $(CCPFLAGS) $(CCBFLAGS)
OBJECTS = $(POBJECTS) $(CMNOBJECTS)

# linker settings
LIBS = $(PLIBS)
LDFLAGS = $(LDBFLAGS)


.SUFFIXES:
.SUFFIXES: .cxx .o .h .c

.cxx.o:
    $(CXX) -c $(CXXFLAGS) -o $@ $<

.c.o:
    $(CC) -c $(CCFLAGS) -o $@ $<

all: loch hlp

hlp:
    make -C ./help

loch:   $(OBJECTS)
    $(CXX) -o loch -Wall $(OBJECTS) $(LIBS) $(LDFLAGS)
    $(POSTMAKE)

loch.res: loch.rc loch.ico
    windres --include-dir e:/MSVCProjects/wxWidgets-2.6.0/include -i loch.rc -I rc -o loch.res -O coff

graphs: 
    dot -Tps graph-vispipe.dot -o graph-vispipe.ps


depend:
    perl makedepend.pl > Makefile.dep
    perl maketest.pl Makefile.dep
    perl makefile.pl mv Makefile.dep Makefile
    $(CXX) -DLXDEPCHECK -DLOCH -MM *.cxx >> Makefile
    $(CC) -DLXDEPCHECK -DLOCH -MM *.c >> Makefile


config-debug:
    perl makeconfig.pl BUILD DEBUG

test-release:
    zip -9 loch.zip loch.exe test.th test.jpg thconfig

config-release:
    perl makeconfig.pl BUILD RELEASE

config-oxygen:
    perl makeconfig.pl BUILD OXYGEN

config-ozone:
    perl makeconfig.pl BUILD OZONE

config-linux:
    perl makeconfig.pl PLATFORM LINUX

config-debian:
    perl makeconfig.pl PLATFORM DEBIAN

config-win32:
    perl makeconfig.pl PLATFORM WIN32

config-macosx:
    perl makeconfig.pl PLATFORM MACOSX

clean:
    perl makefile.pl rm -q *~     
    perl makefile.pl rm -q help/*/*~
    perl makefile.pl rm -q loch.exe
    perl makefile.pl rm -q loch
    perl makefile.pl rm -q loch.app/Contents/MacOS/loch
    perl makefile.pl rm -q *.o
    perl makefile.pl rm -q *.log
    perl makefile.pl rm -q core
    perl makefile.pl rmdir -q .xvpics
    perl makefile.pl rm -q *.bmp
    perl makefile.pl rm -q *.ppm
    perl makefile.pl rm -q *.zip
    perl makefile.pl rm -q *.pdf
    perl makefile.pl rm -q *.png



# DEPENDENCIES
lxAboutDlg.o: lxAboutDlg.cxx lxWX.h icons/about.xpm ../thversion.h
lxData.o: lxData.cxx lxData.h lxMath.h lxImgIO.h lxFile.h lxLRUD.h
lxFile.o: lxFile.cxx lxFile.h lxMath.h img.h
lxGLC.o: lxGLC.cxx lxGLC.h lxMath.h lxGUI.h lxData.h lxImgIO.h lxFile.h \
  lxSetup.h lxSView.h lxWX.h lxFNT6x13_bdf.h lxFNT10x20_bdf.h \
  lxFNTFreeSans_ttf.h lxRender.h lxTR.h
lxGUI.o: lxGUI.cxx lxGUI.h lxGLC.h lxMath.h lxData.h lxImgIO.h lxFile.h \
  lxSetup.h lxRender.h lxOptDlg.h lxAboutDlg.h lxSView.h lxWX.h \
  lxSScene.h icons/open.xpm icons/render.xpm icons/reload.xpm \
  icons/stereo.xpm icons/rotation.xpm icons/lockrot.xpm icons/fit.xpm \
  icons/home.xpm icons/rendersetup.xpm icons/plan.xpm icons/profile.xpm \
  icons/fullscreen.xpm icons/orto.xpm icons/camera.xpm icons/scene.xpm \
  icons/viscline.xpm icons/vissurface.xpm icons/visbbox.xpm \
  icons/viswalls.xpm icons/visinds.xpm loch.xpm
lxImgIO.o: lxImgIO.cxx lxImgIO.h
lxLRUD.o: lxLRUD.cxx lxLRUD.h lxMath.h
lxMath.o: lxMath.cxx lxMath.h
lxOGLFT.o: lxOGLFT.cxx lxOGLFT.h
lxOptDlg.o: lxOptDlg.cxx lxWX.h lxGUI.h lxGLC.h lxMath.h
lxRender.o: lxRender.cxx lxRender.h lxWX.h lxGLC.h lxMath.h lxGUI.h \
  lxSetup.h lxData.h lxImgIO.h lxFile.h lxTR.h
lxSScene.o: lxSScene.cxx lxSScene.h lxWX.h lxGUI.h lxGLC.h lxMath.h \
  lxSetup.h lxData.h lxImgIO.h lxFile.h loch.xpm
lxSView.o: lxSView.cxx lxSView.h lxWX.h lxGUI.h lxGLC.h lxMath.h \
  lxSetup.h lxData.h lxImgIO.h lxFile.h loch.xpm
lxSetup.o: lxSetup.cxx lxSetup.h lxData.h lxMath.h lxImgIO.h lxFile.h
lxWX.o: lxWX.cxx lxWX.h
getline.o: getline.c
img.o: img.c img.h
lxR2D.o: lxR2D.c lxR2D.h
lxR2P.o: lxR2P.c lxR2P.h
lxTR.o: lxTR.c lxTR.h

现在添加 -m32 但出现新错误

c++ -m32 -o loch -Wall getline.o lxTR.o lxOGLFT.o lxSetup.o lxRender.o lxWX.o lxImgIO.o lxLRUD.o lxFile.o lxSTree.o lxData.o lxMath.o lxSView.o lxSScene.o lxGUI.o lxGLC.o lxOptDlg.o lxAboutDlg.o img.o -lz -L/usr/X11R6/lib              -framework IOKit -framework Carbon -framework Cocoa -framework System -framework QuickTime -framework OpenGL -framework AGL  -lwx_macud_gl-2.8 -lwx_macud-2.8  -L/Applications/VTK_All/VTK_Bin/lib/vtk-5.4 -lvtkHybrid -lvtkImaging -lvtkIO -lvtkGraphics -lvtkFiltering -lvtkCommon -lvtkjpeg -lvtkpng -lvtkzlib -lvtksys -lfreetype -lGLU -lGL 
ld: warning: in /Applications/VTK_All/VTK_Bin/lib/vtk-5.4/libvtkHybrid.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Applications/VTK_All/VTK_Bin/lib/vtk-5.4/libvtkImaging.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Applications/VTK_All/VTK_Bin/lib/vtk-5.4/libvtkIO.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Applications/VTK_All/VTK_Bin/lib/vtk-5.4/libvtkGraphics.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Applications/VTK_All/VTK_Bin/lib/vtk-5.4/libvtkFiltering.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Applications/VTK_All/VTK_Bin/lib/vtk-5.4/libvtkCommon.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Applications/VTK_All/VTK_Bin/lib/vtk-5.4/libvtkjpeg.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Applications/VTK_All/VTK_Bin/lib/vtk-5.4/libvtkpng.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Applications/VTK_All/VTK_Bin/lib/vtk-5.4/libvtkzlib.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Applications/VTK_All/VTK_Bin/lib/vtk-5.4/libvtksys.a, file was built for unsupported file format which is not the architecture being linked (i386)
Undefined symbols:

【问题讨论】:

    标签: macos wxwidgets compiler-errors


    【解决方案1】:

    您似乎正在为 64 位软件进行编译,但编译器找到的库是针对 32 位软件的。

    您需要在 32 位模式下重新编译代码以便使用现有的库,或者您需要安装(或定位)并指定 64 位版本的库的位置。

    对于 32 位版本,您可以使用:

    BITTINESS = -m32
    CC = cc ${BITTINESS}
    CXX = c++ ${BITTINESS}
    

    如果您以后愿意,可以在命令行上使用“make BITTINESS=-m64”覆盖。

    可能还有其他方法可以指定您需要某种通用二进制文件 - 但如果您想为该架构构建,您仍然需要找到支持 x86_64 的 WX(和 QuickTime)库版本。


    如何在 MacOS X 上识别文件类型

    对于 dylib,使用 file:

    $ file /usr/lib/libffi.dylib
    /usr/lib/libffi.dylib: Mach-O universal binary with 3 architectures
    /usr/lib/libffi.dylib (for architecture x86_64):    Mach-O 64-bit dynamically linked shared library x86_64
    /usr/lib/libffi.dylib (for architecture i386):  Mach-O dynamically linked shared library i386
    /usr/lib/libffi.dylib (for architecture ppc7400):   Mach-O dynamically linked shared library ppc
    $
    

    对于存档,提取目标文件:

    $ file libjlss-350.a
    libjlss-350.a: current ar archive random library
    $ ar x libjlss-350.a stuint8.o
    $ file stuint8.o
    stuint8.o: Mach-O 64-bit object x86_64
    $
    

    【讨论】:

    • 我现在添加了 -m32 但我遇到了新的错误。我编辑了我的上一篇文章
    • 这是相反的问题;我认为那些库是 64 位的。因此,您必须获得一组连贯的库 - 全部为 32 位或全部为 64 位(或者一些可以通用,只要它们同时具有 32 位和 64 位 Intel 版本的代码)。
    • 嗨,我如何检查 VTK 是否仅构建 64 位?
    • 嘿乔纳森,我搞定了。我刚刚将 VTK 编译为通用的,现在一切运行良好。非常感谢!
    • @JonathanLeffler:感谢您的回复。我发现我的链接问题是因为我有 64 位操作系统,而 macport 安装的库默认是 32 位的。
    猜你喜欢
    • 2014-10-09
    • 2013-03-13
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2023-03-11
    • 2011-01-18
    • 1970-01-01
    相关资源
    最近更新 更多