Была создана библиотека с libС++ или libstdС++ на Mac
Как узнать, была ли библиотека построена с libС++ или libstdС++ на mac?
Я использую otool -L, но это, похоже, не показывает его (у mac нет ldd)
Если у меня есть библиотека X, я хочу знать, нужно ли мне ее перестроить, когда я перехожу из GCC в clang. Я создал несколько библиотек с GCC, Mac-библиотеки, как правило, построены с clang AFAIK.
Ответы
Ответ 1
Статическая библиотека: nm -a helloworld.a | grep __1
Если вы видите строки, содержащие __1
, например. __121__basic_string
, то библиотека была скомпилирована с помощью libС++. Однако, если ни одна из сигнатур функций не использовала типы стандартной библиотеки С++, это может не сработать.
Динамическая библиотека: otool -L helloworld
Ищите зависимость от libС++ или libstdС++ dylib.
Ответ 2
Для динамических библиотек otool -L
будет показывать libstdc++
, если он был создан против этой библиотеки (т.е. если это был С++).
Для статических библиотек вопрос не имеет смысла. Статические библиотеки не создаются для других библиотек.
И вам не нужно ничего перестраивать только потому, что вы меняете компиляторы. Там только одна, общесистемная библиотека С++ и имеет стабильный ABI.