c++ - Xcode 中 wxWidgets 项目中的 undefined symbol

标签 c++ wxwidgets osx-mountain-lion

我正在尝试在 Mac OS X 10.8.3 上使用 wxWidgets-2.9.4 在 Xcode 中配置一个项目。我使用以下选项配置了 wxWidgets:

./configure --enable-debug --disable-shared --enable-unicode --with-osx_cocoa --enable-monolithic

然后编译库成功。所有演示都运行良好。

我使用使用 wx-config 获得的标志配置了我的项目。特别是:

./wx-config --libs
-L/wxWidgets/wxWidgets-2.9.4/build-release/lib   -framework IOKit -framework Carbon -   framework Cocoa -framework AudioToolbox -framework System -framework OpenGL /wxWidgets/wxWidgets-2.9.4/build-release/lib/libwx_osx_cocoau-2.9.a -framework WebKit -lwxregexu-2.9 -lwxtiff-2.9 -lwxjpeg-2.9 -lwxpng-2.9 -lz -lpthread

./wx-config --cxxflags
-I/wxWidgets/wxWidgets-2.9.4/build-release/lib/wx/include/osx_cocoa-unicode-static-2.9 -  I/wxWidgets/wxWidgets-2.9.4/include -D_FILE_OFFSET_BITS=64 -D__WXMAC__ -D__WXOSX__ -D__WXOSX_COCOA__

当我尝试构建我的项目时,我得到许多 undefined symbol :

Undefined symbols for architecture x86_64:
"wxOnAssert(char const*, int, char const*, char const*, wchar_t const*)", referenced from:
  wxMouseState::ButtonIsDown(wxMouseButton) const   in Canvas.o
  wxControlContainerBase::SetContainerWindow(wxWindow*)       in Canvas.o
  wxCloseEvent::Veto(bool)  in GeoTecDocView.o
  wxMouseState::ButtonIsDown(wxMouseButton) const   in GeoTecDocView.o
  wxBufferedDC::InitCommon(wxDC*, int)   in GeoTecDocView.o
  wxBoxSizer::wxBoxSizer(int)in GeoTecDocView.o
  wxArrayString::Item(unsigned long)in GeoTecWxDoc.o
  ...
  "wxOnAssert(char const*, int, char const*, char const*, char const*)", referenced from:
  wxEventFunctorMethod<wxEventTypeTag<wxCommandEvent>, wxEvtHandler, wxEvent, wxEvtHandler>::operator()(wxEvtHandler*, wxEvent&)in DocManager.o
  wxEventFunctorMethod<wxEventTypeTag<wxCommandEvent>, wxEvtHandler, wxEvent, wxEvtHandler>::wxEventFunctorMethod(void (wxEvtHandler::*)(wxEvent&), wxEvtHandler*)in DocManager.o
  wxEventTableEntryBase::wxEventTableEntryBase(int, int, wxEventFunctor*, wxObject*)in DocManager.o
  wxEventFunctorMethod<wxEventTypeTag<wxCommandEvent>, wxEvtHandler, wxEvent, wxEvtHandler>::operator()(wxEvtHandler*, wxEvent&)in GeoTecApp.o
  wxEventFunctorMethod<wxEventTypeTag<wxCommandEvent>, wxEvtHandler, wxEvent, wxEvtHandler>::wxEventFunctorMethod(void (wxEvtHandler::*)(wxEvent&), wxEvtHandler*)in GeoTecApp.o
  wxEventTableEntryBase::wxEventTableEntryBase(int, int, wxEventFunctor*, wxObject*)in GeoTecApp.o
  wxEventFunctorMethod<wxEventTypeTag<wxKeyEvent>, wxEvtHandler, wxEvent, wxEvtHandler>::operator()(wxEvtHandler*, wxEvent&)in GeoTecDocView.o
  ...
  "wxMessageBox(wxString const&, wxString const&, long, wxWindow*, int, int)", referenced from:
  GeoTecMainFrame::OnCancellaTutti(wxCommandEvent&)        in GeoTecDocView.o
  GeoTecMainFrame::OnCancellaLineaCedimenti(wxCommandEvent&)        in GeoTecDocView.o
  GeoTecMainFrame::OnRicalcolaOra(wxCommandEvent&)        in GeoTecDocView.o
  GeoTecMainFrame::AggiornaFinestre()       in GeoTecDocView.o
  GeoTecMainFrame::OnAbout(wxCommandEvent&)       in GeoTecDocView.o
  GeoTecMainFrame::OnRemoveObject(GTGraphicObject*)        in GeoTecDocView.o
  StratigrafiaDialog::Validate()      in GTDialogs.o
  ...
  "wxFileSelector(wxString const&, wxString const&, wxString const&, wxString const&, wxString const&, int, wxWindow*, int, int)", referenced from:
  GeoTecMainFrame::OnImporta(wxCommandEvent&)       in GeoTecDocView.o
  "wxGet_wxConvLibcPtr()", referenced from:
  wxGet_wxConvLibc()     in Canvas.o
  wxGet_wxConvLibc()     in GeoTecApp.o
  wxGet_wxConvLibc()     in GeoTecDocView.o
  wxGet_wxConvLibc()     in GeoTecWxDoc.o
  wxGet_wxConvLibc()     in GlobalParameters.o
  wxGet_wxConvLibc()     in GTDialogs.o
  wxGet_wxConvLibc()     in GTPrint.o
  ...
  "wxBell()", referenced from:
  StrisciaIndefinitaDialog::Calcola(wxCommandEvent&)       in GTDialogs.o
  NumberValidator::OnChar(wxKeyEvent&)       in Validators.o
  IntValidator::OnChar(wxKeyEvent&)       in Validators.o
  "wxEntry(int&, char**)", referenced from:
  _main in GeoTecApp.o
  "wxCheckBox::Create(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long, wxValidator const&, wxString const&)", referenced from:
  wxCheckBox::wxCheckBox(wxWindow*, int, wxString const&, wxPoint const&, wxSize const&, long, wxValidator const&, wxString const&)in GTDialogs.o
  "wxClientDC::wxClientDC(wxWindow*)", referenced from:
  Canvas::OnMouseMove(wxMouseEvent&)       in Canvas.o
  Canvas::OnMouseLeftUp(wxMouseEvent&)       in Canvas.o
  GeoTecCanvas::OnMouseMove(wxMouseEvent&)        in GeoTecDocView.o
  GeoTecCanvas::OnMouseLeftUp(wxMouseEvent&)        in GeoTecDocView.o
  GeoTecCanvas::OnMouseLeftDown(wxMouseEvent&)        in GeoTecDocView.o
  GeoTecCanvas::OnMouseDClick(wxMouseEvent&)        in GeoTecDocView.o
  RiepilogoStratigrafieCanvas::OnMouseLeftDown(wxMouseEvent&)        in RiepilogoStratigrafieView.o
  ...
  "wxDocument::LoadObject(std::basic_istream<char, std::char_traits<char> >&)", referenced from:
  GeoTecWxDoc::LoadObject(std::basic_istream<char, std::char_traits<char> >&)in GeoTecWxDoc.o
  "wxDocument::RemoveView(wxView*)", referenced from:
  vtable for GeoTecWxDocin GeoTecWxDoc.o
  "wxDocument::SaveObject(std::basic_ostream<char, std::char_traits<char> >&)", referenced from:
  GeoTecWxDoc::SaveObject(std::basic_ostream<char, std::char_traits<char> >&)in GeoTecWxDoc.o
 "wxDocument::SetFilename(wxString const&, bool)", referenced from:
  GeoTecWxDoc::SaveAs()      in GeoTecWxDoc.o
 "wxDocument::ms_classInfo", referenced from:
  __static_initialization_and_destruction_0(int, int)in GeoTecWxDoc.o
 "wxDocument::NotifyClosing()", referenced from:
  vtable for GeoTecWxDocin GeoTecWxDoc.o

还有很多。

如果我使用 wxMac-2.8.12,该项目工作正常,但我有一些图形问题,所以我想尝试新版本。

感谢您的帮助。 夏娃

最佳答案

您可能只为 x86 构建了 wxWidgets。无论如何,您肯定是为单一架构构建它,而您的 Xcode 项目可能设置为同时为 x86 和 x86_64 构建。

如果您确实需要 64 位版本的应用程序,您应该使用 --enable-universal_binary=x86,x86_64 选项重新配置 wxWidgets。但我建议至少在开发期间只构建 32 位的 Xcode 项目(即仅针对 x86)。

关于c++ - Xcode 中 wxWidgets 项目中的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16591804/

相关文章:

c++ - 如何将 dll 位置更改为 Codelite 中的子目录?

c++ - 如何在 wxperl EVT_BUTTON 中传递附加参数

function - 如何在 bashrc 中创建一个函数来接受参数?

c++ - 对持有 unique_ptr vector 的对象列表进行排序

c++ - 颠倒排序顺序

c++ - 从具有未知参数计数的函数创建仿函数

phpunit - OSX 10.8 山狮 PEAR/PHPUnit 不工作

c++ - Travis CI 与 Clang 3.4 和 C++11

macos - "Enter Full Screen"wxWidgets 中的热键

python - 如何在 OS X Lion 上维护 Python 包?