【问题标题】:was a library built with libc++ or libstdc++ on Mac是在 Mac 上使用 libc++ 或 libstdc++ 构建的库
【发布时间】:2012-06-16 14:21:41
【问题描述】:

如何判断一个库是在 mac 上使用 libc++ 还是 libstdc++ 构建的?

我一直在用otool -L,但是这个好像没有显示(mac没有ldd)

如果我有库 X,我想知道在从 GCC 迁移到 clang 时是否需要重建它。我用 GCC 建了很多库,mac 库一般都是用 clang AFAIK 建的。

【问题讨论】:

    标签: c++ macos clang


    【解决方案1】:

    静态库nm -a helloworld.a | grep __1

    如果您看到包含 __1 的行,例如__121__basic_string,然后库是用 libc++ 编译的。但是,如果没有一个函数签名使用 C++ 标准库类型,那么这可能不起作用。

    动态库otool -L helloworld

    寻找对 libc++ 或 libstdc++ dylib 的依赖。

    【讨论】:

      【解决方案2】:

      对于动态库,otool -L 将显示 libstdc++,如果它是针对该库构建的(即如果它是 C++)。

      对于静态库,这个问题没有意义。静态库不是针对其他库构建的。

      而且你不应该仅仅因为你正在改变编译器就重建任何东西。只有一个系统范围的 C++ 库,它有一个稳定的 ABI。

      【讨论】:

      • 嗯 - 你对 ABI 的评论似乎不正确关于 libc++ v libstdc++ - stackoverflow.com/a/8457799/1460739
      • 问题是编译器变化少,标准库变化多。
      • 另一个问题是关于有人专门使用指定的 C++ 库编译程序,但链接到未针对同一个 C++ 库编译的库。如果您只是让编译器完成它的工作而不覆盖它,那么您将获得适用于所有内容的系统 stdc++ 库并且它可以工作。如果你覆盖它,你必须以同样的方式覆盖它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 2013-09-08
      • 2013-02-05
      • 2022-01-16
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多