13

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

我一直在使用otool -L,但这似乎没有显示出来(mac没有ldd)

如果我有库 X,我想知道在从 GCC 迁移到 clang 时是否必须重建它。我已经用 GCC 构建了许多库,mac 库通常是用 clang AFAIK 构建的。

4

2 回答 2

8

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

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

动态库otool -L helloworld

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

于 2015-06-19T01:53:57.757 回答
3

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

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

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

于 2012-06-16T15:12:38.267 回答