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

时间:2013-07-02 00:16:36

标签: c++ xcode boost linker-errors wt

我很遗憾地提出一个问题,以不同的形式在整个地方重新出现,但是这让我撕裂了我的头发,我已经尝试了互联网所有黑暗角落的每一个建议。

我正在尝试使用Xt的Wt框架(用于基于Web的c ++应用程序)。它的头文件位于/ 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 个答案:

答案 0 :(得分:2)

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

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

安装这些新版本后,我确保Xcode在其他C ++标志选项中有-L/usr/local/lib -I/usr/local/include并且/usr/local/include&amp;分别在“标头搜索路径”和“图书馆搜索路径”中/usr/local/lib。然后,我将库添加到“带库的链接二进制文件”部分。这解决了我的问题。