Run otool -L
sur, et il montrera sa réalité la version. Je choisir libSystem.B car il a une version différente dans les 10,4 et 10,5 SDKs:
$ 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)
(voir comment le premier a 88.3.11 la version, tandis que le second a 111.1.4). Cet exemple montre également que toutes les bibliothèques sont des liens symboliques vers des fichiers avec le numéro de version dans les:
$ 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
Ici, les fichiers n'ont pas le numéro de version en leur nom.
EDIT: une deuxième solution consiste à utiliser NSVersionOfRunTimeLibrary
dans un programme de test, dans lequel vous obligez charger la bibliothèque que vous souhaitez vérifier. Créer un programme libversion
de la source C suivant:
#include <stdio.h>
#include <mach-o/dyld.h>
int main (int argc, char **argv)
{
printf ("%x\n", NSVersionOfRunTimeLibrary (argv[1]));
return 0;
}
Ensuite, vous appelez ça comme ça:
$ DYLD_INSERT_LIBRARIES=/usr/lib/libpam.2.dylib ./a.out libpam.2.dylib
30000
(ici, le numéro de version est imprimée en hexadécimal, mais vous pouvez adapter à vos besoins .)
Beaucoup mieux répondre, supprimé le mien. – EightyEight