web-dev-qa-db-fra.com

Saucy: Les bibliothèques partagées Boost ne contiennent aucun symbole

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.

4
user3293204

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.

3
Mike Miller

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

0
user9869932