我应该使用libc ++还是libstdc ++?

Loo*_*zie 79 linux macos opencv libstdc++ libc++

我正在使用c/c ++为osx和linux开发命令行界面可执行文件.该项目将链接到opencv.我应该使用libc ++还是libstdc ++?

Jon*_*ely 79

我会为每个操作系统使用本机库,即GNU/Linux上的libstdc ++和Mac OS X上的libc ++.

libc ++在GNU/Linux上并非100%完整,当libstdc ++更完整时,使用它并没有什么优势.此外,如果你想链接到用C++编写的任何其他库,它们几乎肯定是用libstdc ++构建的,所以你也需要链接它以使用它们.

更多信息点击这里了解libc中的各种平台上的完整性++.

  • 我不是在谈论硬件.同样,我不知道libc ++,但大多数C++标准库是在OS的C库上实现的,例如从`std :: ctype_base :: mask`值到`<ctype.h>`常量的映射完全取决于平台.(CPU内在函数由编译器提供,异常处理由低级ABI层完成,但IO通常完全在C++和C库中完成,而不是低级别的东西). (4认同)
  • 您能否详细说明/提供有关Linux上libc ++完整性状态的链接?我不太明白为什么这将是特定于平台的,因为libc ++只是一堆标准库头文件.或者你是否意味着需要将Clang wrt构建到Linux上不受支持的LLVM运行时库? (3认同)
  • @abergmeier,这是一个虚假的论点,因为(当与 GCC 或其他符合条件的编译过程一起使用时)libstdc++ 不会对使用它的代码施加任何限制,无论是动态链接还是静态链接。这不是 LGPL。请不要传播FUD。https://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.license.what (2认同)

小智 29

主要的Linux发行版不提供LLVM libc ++,因为:

  1. 与Apple和FreeBSD不同,GPL + 3不是问题,所以不需要在这里实现另一个堆栈.
  2. Linux组件已经围绕GNU libstd ++开发了很长时间.其中一些不建立在其他任何东西上.
  3. 虽然libc ++在新功能方面很强大,但它在遗留代码方面存在一些问题.

如果最终libc ++成为发行版的一部分,它将作为可选组件.链接它可能需要额外的选项.

就像Jonathan所说,你应该使用默认包含的任何工具.Clang在Linux中使用是安全的,因为它被配置为GCC替代品,所以在这方面你不必担心2个编译器.此外,由于您的目标是两个平台,因此您应该查看cmake.

  • @IsaacPascual Mario的意思是clang正式在其设计目标中成为您运行它的平台上的杰出编译器的替代品(例如,在linux上运行时的gcc).同样适用于英特尔的编译器afaik.这是他们获得更广泛采用的方式. (4认同)
  • Clang 不是 GCC 的替代品……只是另一个编译器。 (2认同)