Je dois créer un lien avec certains fichiers de la bibliothèque partagée de Boost (.so
). J'ai installé boost en cours d'exécution
Sudo apt-get install libboost-all-dev
Les fichiers d'en-tête et les bibliothèques statiques sont correctement installés. Les bibliothèques partagées sont également installées, mais elles ne contiennent aucun symbole.
$ nm /usr/lib/x86_64-linux-gnu/libboost_filesystem.so
nm: /usr/lib/x86_64-linux-gnu/libboost_filesystem.so: no symbols
Comment est-ce possible et comment puis-je résoudre ce problème? Je comprends qu’il s’agit d’un problème vague, mais j’ai essayé apt-get clean
et complètement supprimé et purgé tous les paquets Debian boost, puis réinstallé et j’obtiens toujours le même résultat. Compiler Boost à partir des sources et installer une version séparée n’est pas idéal.
La plupart des bibliothèques partagées installées à partir des référentiels Ubuntu ne contiennent pas de symboles. Les packages sont généralement construits avec des symboles de débogage, qui sont ensuite supprimés et placés dans des packages installables séparément pour être utilisés avec gdb
ou d'autres débogueurs.
Si vous voulez voir les symboles dans la bibliothèque table de symboles dynamiques, qui sont les symboles publics auxquels vous pouvez être liés, utilisez nm -D
au lieu de simplement nm
.
J'ai eu le même problème avec une autre bibliothèque (libcudart.so). Je l'ai résolu en utilisant une bibliothèque statique '.a'.
Ce que j'ai fait:
$ find /usr/local/cuda-7.0 -type f -name libcudart\*
directory/libcuda_static.a
$ compiler -Ldirectory -lcudart_static
J'espère que ça aidera quelqu'un