Should I use libc++ or libstdc++?

LinuxMacosOpencvLibstdc++Libc++

Linux Problem Overview


I am developing command line interface executables for both osx and linux using c/c++. The project will link against opencv. Should I use libc++ or libstdc++?

Linux Solutions


Solution 1 - Linux

I would use the native library for each OS i.e. libstdc++ on GNU/Linux and libc++ on Mac OS X.

libc++ is not 100% complete on GNU/Linux, and there's no real advantage to using it when libstdc++ is more complete. Also, if you want to link to any other libraries written in C++ they will almost certainly have been built with libstdc++ so you'll need to link with that too to use them.

More info here about the completeness of libc++ on various platforms.

Solution 2 - Linux

Major Linux distributions do not provide LLVM libc++, because:

  1. Unlike Apple and FreeBSD, the GPL+3 is not an issue, so no need to implement another stack here.
  2. Linux components have been developed around GNU libstd++ for ages. Some of them do not build on anything else.
  3. While libc++ is strong in new features, it has some problems with legacy code.

If eventually libc++ became part of distributions, it will be as an optional component. linking against it will probably require extra options.

Like Jonathan said, you should use whatever tool is included by default. Clang is safe in Linux to use since is configured as a GCC replacement, so in that aspect you don't have to worry about 2 compilers. Also since you are targeting two platforms, you should take a look to cmake.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMobileDevView Question on Stackoverflow
Solution 1 - LinuxJonathan WakelyView Answer on Stackoverflow
Solution 2 - LinuxMario VazquezView Answer on Stackoverflow