【发布时间】:2012-06-16 14:21:41
【问题描述】:
如何判断一个库是在 mac 上使用 libc++ 还是 libstdc++ 构建的?
我一直在用otool -L,但是这个好像没有显示(mac没有ldd)
如果我有库 X,我想知道在从 GCC 迁移到 clang 时是否需要重建它。我用 GCC 建了很多库,mac 库一般都是用 clang AFAIK 建的。
【问题讨论】:
如何判断一个库是在 mac 上使用 libc++ 还是 libstdc++ 构建的?
我一直在用otool -L,但是这个好像没有显示(mac没有ldd)
如果我有库 X,我想知道在从 GCC 迁移到 clang 时是否需要重建它。我用 GCC 建了很多库,mac 库一般都是用 clang AFAIK 建的。
【问题讨论】:
静态库:nm -a helloworld.a | grep __1
如果您看到包含 __1 的行,例如__121__basic_string,然后库是用 libc++ 编译的。但是,如果没有一个函数签名使用 C++ 标准库类型,那么这可能不起作用。
动态库:otool -L helloworld
寻找对 libc++ 或 libstdc++ dylib 的依赖。
【讨论】:
对于动态库,otool -L 将显示 libstdc++,如果它是针对该库构建的(即如果它是 C++)。
对于静态库,这个问题没有意义。静态库不是针对其他库构建的。
而且你不应该仅仅因为你正在改变编译器就重建任何东西。只有一个系统范围的 C++ 库,它有一个稳定的 ABI。
【讨论】: