Run otool -L
su di esso, e mostrerà la sua realtà di versione. Ho scelto libSystem.B come ha versione diversa nei 10.4 e 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)
(vedere come il primo ha 88.3.11 versione, mentre la seconda ha 111.1.4). Questo esempio dimostra anche che non tutte le librerie sono collegamenti simbolici ai file con il numero di versione in loro:
$ 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
Qui, i file non hanno il numero di versione nel loro nome.
MODIFICA: una seconda soluzione è utilizzare NSVersionOfRunTimeLibrary
in un programma di test, in cui si forza il carico della libreria che si desidera controllare. Creare un programma libversion
della fonte seguente C:
#include <stdio.h>
#include <mach-o/dyld.h>
int main (int argc, char **argv)
{
printf ("%x\n", NSVersionOfRunTimeLibrary (argv[1]));
return 0;
}
Poi, si chiamano così:
$ DYLD_INSERT_LIBRARIES=/usr/lib/libpam.2.dylib ./a.out libpam.2.dylib
30000
(qui, il numero di versione viene stampato come esadecimale, ma è possibile adattare alle proprie esigenze .)
fonte
2010-03-03 21:12:39
Risposta molto migliore, cancellata la mia. – EightyEight