2012-06-16 6 views
12

Wie kann ich feststellen, ob eine Bibliothek mit libC++ oder libstdC++ auf dem Mac erstellt wurde?war eine Bibliothek mit libC++ oder libstdC++ auf dem Mac

Ich habe mit otool -L, aber dies scheint nicht zu zeigen (mac hat keine LDD)

Wenn ich Bibliothek X haben, möchte ich wissen, ob ich es wieder aufzubauen, wie ich aus bewegen GCC zu klingeln. Ich habe eine Reihe von Bibliotheken mit GCC gebaut, Mac-Bibliotheken sind in der Regel mit Clang AFAIK gebaut.

Antwort

3

Für dynamische Bibliotheken würde otool -Llibstdc++ zeigen, wenn es für diese Bibliothek erstellt würde (d. H. Wenn es C++ wäre).

Für statische Bibliotheken ist die Frage nicht sinnvoll. Statische Bibliotheken werden nicht für andere Bibliotheken erstellt.

Und Sie sollten nichts neu aufbauen müssen, nur weil Sie Compiler ändern. Es gibt nur eine einzige systemweite C++ - Bibliothek, und es hat einen stabilen ABI.

+0

Hmm - Ihr Kommentar zu ABI scheint nicht korrekt in Bezug auf libC++ v libstdC++ - http://Stackoverflow.com/a/8457799/1460739 – user1460739

+0

Das Problem ist weniger die Compiler-Änderung, mehr die Standardbibliothek ändern. – user1460739

+1

Diese andere Frage bezog sich auf jemanden, der speziell ein Programm kompiliert, das eine bestimmte C++ - Bibliothek verwendet, aber eine Verknüpfung mit einer Bibliothek herstellt, die nicht mit derselben C++ - Bibliothek kompiliert ist. Wenn Sie den Compiler einfach machen lassen, ohne ihn zu überschreiben, erhalten Sie die System stdC++ - Bibliothek für alles und es funktioniert. Wenn Sie es überschreiben, müssen Sie es für alle auf die gleiche Weise überschreiben. –

8

Statische Bibliothek: nm -a helloworld.a | grep __1

Wenn Sie Zeilen sehen, die __1, z.B. __121__basic_string, dann wurde die Bibliothek mit libC++ kompiliert. Wenn jedoch keine der Funktionssignaturen C++ - Standardbibliothekstypen verwendet, funktioniert dies möglicherweise nicht.

Dynamische Bibliothek: otool -L helloworld

Geben Sie für die Abhängigkeit von libC++ oder libstdC++ dylib.