The problem is that starting with OSX 10.9 Apple changed default standard c++ library from libstdc++ to libc++.
Qt binary distribution compile with -stdlib=libstdc++ to be compatible with 10.6, Xcode 5 on 10.9 will select -stdlib=libc++ by default (for OS X 10.7 and better only). So symbol using classes from the standard library (like std::string in this case) will not resolve correctly at link time.
So it's necessary to compile all libraries with one type of libstdc++ (or libc++). Because I need to keep 10.6 compatibility, it's necessary to compile boost and other libraries with libstdc++ dependency.
To check which library is used, use otool tool:
As result you will get something like this (check /libc++1.dylib):
How to fix it for boost
it's necessary to recompile boost (and don't forget to remove ./bin.v2 directory) with these params:
and run otool again:
How to fix it for CMake libraries
In case you're using library which is built by CMake system, you need to add following flag:
How to fix other libraries
For any other library it's necessary to pass libstdc++ flag in any available way, for example modify makefile and add :
Second way how to fix it, compile app using latest compiler
Another way is to update mkspecs to compile for latest MacOS version, after that, compiler will be the same like compiler used on all other libraries. To do that, it's necessary to update file: