====Lecture==== ===Récupérer la liste des symboles dans une librairie=== * Sous Windows : Liste des symboles exportés. "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\dumpbin.exe" /EXPORTS librairie.dll Liste de tous les symboles, y compris demanglé correctement. "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\dumpbin.exe" /UNWINDINFO librairie.dll * Sous Linux : nm -C librairie.so Il est important de vérifier l'état de chaque symbole. Si un symbole est ''U'', cela signifie que la librairie l'utilise mais qu'elle est défini dans une autre librairie. Si la librairie n'a pas de symboles ou que l'on souhaite n'avoir que les symboles exportées de la librairie dynamique, utiliser l'option : nm -C -D librairie.so Ou : readelf -Ws --demangle librairie.so Ou : objdump -TC librairie.so ===Récupérer la liste des dépendances dans une librairie=== * Sous windows : dumpbin /dependents librairie.dll * Sous Linux : ldd librairie.so ou readelf -d librairie.so | grep 'NEEDED' ====Modifier==== ===Fusionner des librairies statiques=== * Sous Windows "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\lib.exe" /OUT:merge.lib lib1.lib lib2.lib * Sous Linux ar -rc merge.a lib1.lib lib2.lib Il est aussi possible de générer une pseudo librairie statique (thin archive). Cette librairie va se comporter comme un sommaire de tous les symboles mais sans contenir le code associé. ar -rcT merge.a lib1.lib lib2.lib ar -rc --thin merge.a lib1.lib lib2.lib