c++ - 在 Xcode 中链接 C++ 库(用于 Wt)

标签 c++ xcode boost linker-errors wt

我很抱歉提出一个以不同形式出现在各处的问题,但这让我焦头烂额,我已经尝试了来自互联网所有黑暗角落的每一个建议。

我正在尝试将 Wt 框架(用于基于 Web 的 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 版本)拖到“Link Binary with Libraries”部分
  • 以上的所有组合

现在,我对这个链接器错误大发雷霆:

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 进行开发,所以我可能遗漏了一些明显的东西;如果有人能指出来,我将不胜感激!

最佳答案

好吧,我终于明白了。事实证明,问题在于我的程序是使用 libc++ 库编写的,而 Wt 库是使用较旧的 libstdc++ 构建的。

为了解决这个问题,我使用 libc++ 重新编译了 boost 和 Wt,方法是更改​​它们的 CMakeLists.txt 文件,添加行 set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++") .这产生了大量警告,但似乎有效。

安装这些新版本后,我确保 Xcode 在其 Other C++ Flags 选项和 /usr 中有 -L/usr/local/lib -I/usr/local/include/local/include/usr/local/lib 分别位于“ header 搜索路径”和“库搜索路径”中。然后,我将这些库添加到“将二进制文件与库链接”部分。这解决了我的问题。

关于c++ - 在 Xcode 中链接 C++ 库(用于 Wt),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17415564/

相关文章:

c++ - Mongo - 从值中获取 view_or_value?

xcode - 如何在成功将您的应用程序提交到应用程序商店后更改构建?

c++ - 使用 Qt 和 Boost 时出现链接器错误

c++ - boost::tokenizer_iterator 的问题——如何查看下一个迭代器?

c++ - 访问结构列表中的列表元素

c++ - "undefined reference to ` QString::fromAscii_helper(char const*, int) '"

c++ - 使用 C 数组语法将 GNU Octave(或 Matlab)矩阵输出到文件中

ios - NSRegularExpression,匹配字符串,高亮文本。大约 85% 的时间工作。为什么?

xcode - 如果我单击 UITextField,如何使 UIPickerView 出现?

c++ - 如何在 beast 1.7 中打印 http 消息