2013-07-02 4 views
0

Прошу просить задать вопрос, который появляется повсюду в разных формах, но это меня разрывает мои волосы, и я пробовал каждое предложение со всех темных углов Интернета.Связывание библиотек C++ (для Wt) в Xcode

Я пытаюсь использовать структуру Wt (для веб-приложений на C++) с помощью Xcode. Его файлы заголовков находятся в каталоге/usr/local/include, а его файлы библиотеки (и boost) находятся в/usr/local/lib. Я могу скомпилировать на терминале

gcc -o hello testWt.cpp -lstdc++ -lwt.3.3.0 -lwthttp.3.3.0 -lboost_random -lboost_regex -lboost_signals -lboost_system -lboost_thread -lboost_filesystem -lboost_program_options -lboost_date_time 

, но в пределах Xcode Мне не повезло. Я пробовал:

  • Добавление -I/USR/местные/включают в OTHER_C++_FLAGS опции
  • Добавление/USR/местные/Библиотека для Library Search Paths опции
  • Добавление/USR/местные/включают в Header Search Paths
  • Перетаскивание все библиотеки (как .dylib и/или версии .a) в «Link Binary с библиотеками» раздела
  • все комбинации выше

Теперь я трепку голову против этой ошибки компоновщика:

Ld /Users/charles/Library/Developer/Xcode/DerivedData/Test-dzrqjofmpnjowvcwtscacpwnhtqw/Build/Products/Debug/Test normal x86_64 
cd /Users/charles/tmp/Test 
setenv MACOSX_DEPLOYMENT_TARGET 10.7 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk -L/Users/charles/Library/Developer/Xcode/DerivedData/Test-dzrqjofmpnjowvcwtscacpwnhtqw/Build/Products/Debug -L/usr/local/lib -F/Users/charles/Library/Developer/Xcode/DerivedData/Test-dzrqjofmpnjowvcwtscacpwnhtqw/Build/Products/Debug -filelist /Users/charles/Library/Developer/Xcode/DerivedData/Test-dzrqjofmpnjowvcwtscacpwnhtqw/Build/Intermediates/Test.build/Debug/Test.build/Objects-normal/x86_64/Test.LinkFileList -mmacosx-version-min=10.7 -stdlib=libc++ -lwt.3.3.0 -lwthttp.3.3.0 -lboost_atomic -lboost_chrono -lboost_context -lboost_date_time -lboost_exception -lboost_filesystem -lboost_graph -lboost_iostreams -lboost_locale -lboost_math_c99 -lboost_math_c99f -lboost_math_c99l -lboost_math_tr1 -lboost_math_tr1f -lboost_math_tr1l -lboost_prg_exec_monitor -lboost_program_options -lboost_python -lboost_random -lboost_regex -lboost_serialization -lboost_signals -lboost_system -lboost_test_exec_monitor -lboost_thread -lboost_timer -lboost_unit_test_framework -lboost_wave -lboost_wserialization -o /Users/charles/Library/Developer/Xcode/DerivedData/Test-dzrqjofmpnjowvcwtscacpwnhtqw/Build/Products/Debug/Test 

Undefined symbols for architecture x86_64: 

    "Wt::WApplication::makeAbsoluteUrl(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const", referenced from: 
    vtable for HelloApplication in main.o 

ld: symbol(s) not found for architecture x86_64 

Далее, чем это я не могу. Это первый раз, когда я использовал Xcode для разработки, поэтому я могу пропустить что-то очевидное; Я был бы невероятно благодарен, если бы кто-нибудь мог это указать!

+0

Вы уверены, что используете одну и ту же целевую среду? Извините, но я не испытываю xcode, но ваша ошибка, похоже, связана с проблемой кросс-платформы? –

+0

Да, все библиотеки были построены на том же компьютере. В конце концов я это выяснил (см. Ответ ниже): это потому, что библиотеки были построены с использованием разных стандартных библиотек. – CharlieB

ответ

0

ОК, я, наконец, получил его. Оказывается, проблема заключалась в том, что моя программа написана с использованием библиотек libC++, тогда как библиотека Wt была построена с использованием более старого libstdC++.

Чтобы исправить это, я перекомпилировал boost и Wt, используя libC++, изменив их файл CMakeLists.txt, добавив строку set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++"). Это вызвало тонны предупреждений, но, похоже, сработало.

После установки этих новых сборок, я убедился, что Xcode был -L/usr/local/lib -I/usr/local/include в его Другие варианты C++ Флаги и /usr/local/include & /usr/local/lib в «Header Search Paths» и «Библиотека путей поиска» соответственно. Затем я добавил библиотеки в раздел «Связывание двоичных файлов с библиотекой». Это решило мою проблему.

Смежные вопросы