Run otool -L
auf, und es wird seine tatsächlich Version zeigen. Ich wähle libSystem.B wie es andere Version in den 10.4 und 10.5 SDKs hat:
$ 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)
(sehen, wie die erste hat 88.3.11 Version, während der zweite 111.1.4 hat). Dieses Beispiel zeigt auch, dass nicht alle Bibliotheken sind symbolische Links zu Dateien mit der Versionsnummer in ihnen:
$ 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
Hier werden die Dateien nicht die Versionsnummer in ihrem Namen haben.
EDIT: eine zweite Lösung ist es, NSVersionOfRunTimeLibrary
in einem Testprogramm zu verwenden, in dem Sie laden die Bibliothek, die Sie überprüfen möchten. Erstellen Sie ein Programm libversion
aus der folgenden C-Quelle:
#include <stdio.h>
#include <mach-o/dyld.h>
int main (int argc, char **argv)
{
printf ("%x\n", NSVersionOfRunTimeLibrary (argv[1]));
return 0;
}
Dann rufen Sie es wie folgt aus:
$ DYLD_INSERT_LIBRARIES=/usr/lib/libpam.2.dylib ./a.out libpam.2.dylib
30000
(hier wird die Versionsnummer als hexadezimale gedruckt, aber Sie können an Ihre Bedürfnisse anpassen .)
Viel bessere Antwort, meine gelöscht. – EightyEight