Run otool -L
en él, y se mostrará su versión de realidad. Elegir libSystem.B ya que tiene versión diferente en los 10.4 y 10.5 SDK:
$ otool -L /Developer/SDKs/MacOSX10.4u.sdk/usr/lib/libSystem.B.dylib
/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/libSystem.B.dylib:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.3.11)
/usr/lib/system/libmathCommon.A.dylib (compatibility version 1.0.0, current version 220.0.0)
$ otool -L /Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.B.dylib
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.B.dylib:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
/usr/lib/system/libmathCommon.A.dylib (compatibility version 1.0.0, current version 292.4.0)
(ver cómo el primero de ellos cuenta con la versión 88.3.11, mientras que el segundo tiene 111.1.4). Este ejemplo muestra también que no todas las bibliotecas son enlaces simbólicos a los archivos con el número de versión en ellos:
$ ll /Developer/SDKs/MacOSX10.*.sdk/usr/lib/libSystem.B.dylib
-rwxr-xr-x 1 root wheel 749K May 15 2009 /Developer/SDKs/MacOSX10.4u.sdk/usr/lib/libSystem.B.dylib
-rwxr-xr-x 1 root wheel 670K May 15 2009 /Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.B.dylib
-rwxr-xr-x 1 root wheel 901K Sep 25 00:21 /Developer/SDKs/MacOSX10.6.sdk/usr/lib/libSystem.B.dylib
Aquí, los archivos no tienen el número de versión en su nombre.
EDIT: una segunda solución es usar NSVersionOfRunTimeLibrary
en un programa de prueba, en el que fuerza la carga de la biblioteca que desea verificar. Crear un programa de libversion
de la siguiente fuente C:
#include <stdio.h>
#include <mach-o/dyld.h>
int main (int argc, char **argv)
{
printf ("%x\n", NSVersionOfRunTimeLibrary (argv[1]));
return 0;
}
A continuación, se llaman así:
$ DYLD_INSERT_LIBRARIES=/usr/lib/libpam.2.dylib ./a.out libpam.2.dylib
30000
(aquí, el número de versión se imprime como hexadecimal, pero se puede adaptar a sus necesidades .)
Mucho mejor respuesta, eliminado el mío. – EightyEight