Связывание библиотек c ++ (для Wt) в Xcode

Извините, что задаю вопрос, который появляется повсюду в разных формах, но это заставляет меня рвать на себе волосы, и я пробовал каждое предложение из всех темных уголков Интернета.

Я пытаюсь использовать Wt Framework (для веб-приложений 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 / local / include к OTHER_C++_FLAGS вариант
  • Добавление / usr / local / lib в Library Search Paths вариант
  • Добавление / usr / local / include к Header Search Paths
  • Перетащите все библиотеки (версии .dylib и / или .a) в раздел «Связать двоичные файлы с библиотеками».
  • Все комбинации вышеперечисленного

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

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 для разработки, поэтому я могу упустить что-то очевидное; Я был бы невероятно благодарен, если бы кто-то мог указать на это!

1

Решение

ОК, я наконец понял. Оказывается, проблема была в том, что моя программа написана с использованием библиотек 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 ++ Flags и /usr/local/include & /usr/local/lib в «Пути поиска по заголовку» и «Пути поиска в библиотеке» соответственно. Затем я добавил библиотеки в раздел «Связать двоичные файлы с библиотекой». Это решило мою проблему.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]