2012-06-16 19 views
12

¿Cómo puedo saber si una biblioteca se ha creado con libC++ o libstdC++ en mac?era una biblioteca creada con libC++ o libstdC++ en Mac

He estado usando otool -L, pero esto no parece mostrar que (mac no tiene LDD)

Si tengo biblioteca X, quiero saber si tengo que reconstruirla Cuando voy de una GCC a clang. He creado varias bibliotecas con GCC, las macotecas generalmente se crean con clan AFAIK.

Respuesta

3

Para las bibliotecas dinámicas, otool -L mostraría libstdc++ si se creara en esa biblioteca (es decir, si fuera C++).

Para bibliotecas estáticas, la pregunta no tiene sentido. Las bibliotecas estáticas no se compilan contra otras bibliotecas.

Y no debería tener que reconstruir nada solo porque está cambiando los compiladores. Solo hay una biblioteca de C++ en todo el sistema y tiene un ABI estable.

+0

Hmm: su comentario sobre ABI no parece correcto con respecto a libC++ v libstdC++ - http://stackoverflow.com/a/8457799/1460739 – user1460739

+0

El problema es menos el cambio del compilador, más el cambio de biblioteca estándar. – user1460739

+1

Esa otra pregunta se refería a que alguien compilara específicamente un programa utilizando una biblioteca C++ especificada pero vinculando una biblioteca no compilada contra esa misma biblioteca C++. Si solo dejas que el compilador haga lo suyo sin anularlo, obtienes la biblioteca del sistema stdC++ para todo y funciona. Si lo reemplaza, debe anularlo de la misma manera para todo. –

8

biblioteca estática: nm -a helloworld.a | grep __1

Si ves líneas que contiene __1, por ejemplo, __121__basic_string, luego la biblioteca fue compilada con libC++. Sin embargo, si ninguna de las firmas de función utiliza tipos de biblioteca estándar de C++, puede que esto no funcione.

biblioteca dinámica: otool -L helloworld

Busque dependencia de libC++ o libstdC++ dylib.

Cuestiones relacionadas