2012-06-16 1 views
12

Как узнать, была ли библиотека построена с libC++ или libstdC++ на Mac?была библиотека, построенная с libC++ или libstdC++ на Mac

Я использую otool -L, но это не похоже, чтобы показать его (макинтош не имеет LDD)

Если у меня есть библиотека X, я хочу знать, если я должен восстановить его, как я двигаюсь от GCC. Я создал ряд библиотек с GCC, Mac-библиотеки, как правило, построены с clang AFAIK.

ответ

3

Для динамических библиотек otool -L отобразит libstdc++, если он был создан против этой библиотеки (то есть, если это был C++).

Для статических библиотек вопрос не имеет смысла. Статические библиотеки не создаются для других библиотек.

И вам не нужно ничего перестраивать только потому, что вы меняете компиляторы. Есть только одна, общесистемная библиотека C++, и она имеет стабильную ABI.

+0

Хмм - ваш комментарий к ABI не кажется правильным относительно libC++ v libstdC++ - http://stackoverflow.com/a/8457799/1460739 – user1460739

+0

Проблема заключается в том, что изменение компилятора меньше, а больше стандартная замена библиотеки. – user1460739

+1

Этот вопрос касался того, что кто-то специально компилировал программу, используя указанную C++-библиотеку, но ссылаясь на библиотеку, не скомпилированную против той же библиотеки C++. Если вы просто позволите компилятору сделать свое дело без переопределения, вы получите библиотеку системы stdC++ для всего, и она работает. Если вы переопределите его, вы должны переопределить его одинаково для всего. –

8

Статическая библиотека: nm -a helloworld.a | grep __1

Если вы видите строки, содержащие __1, например, __121__basic_string, тогда библиотека была скомпилирована с libC++. Однако, если ни одна из сигнатур функций не использует типы стандартной библиотеки C++, это может не сработать.

Динамическая библиотека: otool -L helloworld

Посмотрите на зависимость от LibC++ или libstdC++ dylib.

 Смежные вопросы

  • Нет связанных вопросов^_^