2015-12-25 2 views
0

Nous essayons de faire la sourde oreille make install règle pour OS X. Nous aménageons bibliothèque:Est-ce que "@executable_path" est un littéral?

g++ -dynamiclib -o libcryptopp.dylib -DNDEBUG -g2 -O2 -fPIC -march=native \ 
    -pipe -install_name "libcryptopp.dylib" -current_version "5.6.3" \ 
    -compatibility_version "5.6" -Wl,-headerpad_max_install_names cryptlib.o ... 

Quand j'utilise otool -L:

$ otool -L libcryptopp.dylib 
libcryptopp.dylib: 
    libcryptopp.dylib (compatibility version 5.6.0, current version 5.6.3) 
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0) 
    ... 

Selon Creating working dylibs, nous voulons voir @executable_path. Donc, comme une course sèche:

$ install_name_tool -change libcryptopp.dylib "@executable_path/libcryptopp.dylib" ./libcryptopp.dylib 
$ echo $? 
0 

Et puis:

$ otool -L libcryptopp.dylib 
libcryptopp.dylib: 
    libcryptopp.dylib (compatibility version 5.6.0, current version 5.6.3) 
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 56.0.0) 
    ... 

donc tout réussi, mais rien ne semble changer. Et je reçois le même résultat avec:

$ install_name_tool -change libcryptopp.dylib "$PWD/libcryptopp.dylib" ./libcryptopp.dylib 
$ echo $? 
0 

Une dernière tentative avec le même résultat ...

$ install_name_tool -change libcryptopp.dylib "@executable_path/$PWD/libcryptopp.dylib" ./libcryptopp.dylib 
$ echo $? 
0 

Nous pouvons changer avec install_name_tool -id, mais nous ne savons pas si elle est juste:

$ install_name_tool -id "@executable_path/libcryptopp.dylib" ./libcryptopp.dylib 
$ otool -L libcryptopp.dylib 
libcryptopp.dylib: 
    @executable_path/libcryptopp.dylib (compatibility version 5.6.0, current version 5.6.3) 

Est-ce que "@executable_path" est un littéral? Est-ce censé fonctionner comme un espace réservé qui indique "le chemin complet de ce fichier exécutable"?


est ici quelques articles connexes sur le site d'Apple, mais je n'ai pas été en mesure de déterminer ce que je besoin d'eux:

Le deuxième semble indiquer que je devrais utiliser "@executable_path" littéralement.

Répondre

0

Je réponds trop tard mais de toute façon!

Vous essayez de modifier l'ID de la bibliothèque et non une dépendance. Je ne sais pas pourquoi mais quand vous lancez la commande "otool -L", il montrera d'abord l'ID de la bibliothèque et après la liste des dépendances. Je ne pense pas que ce soit une bonne idée de changer l'identifiant. Cordialement, Clément