J'ai un petit problème avec code::blocks sous Linux avec mon projet.
J'ai trois projets dans un workspace:
-- Un projet exécutable pour tester une librairie partagée.
-- Un projet Librairie partagée principal
-- un autre projet de librairie partagée utilitaire
Dans la boîte de dialogue Project settings, dans l'onglet Build Targets, j'ai redéfinit le Output Filename pour créer l'exécutable et la librairie dans le même répertoire.
en gros, sa donne ceci:
/home/philippe/A3D_Debug/TestApplication
/home/philippe/A3D_Debug/libA3D_Core.so
/home/philippe/A3D_Debug/libA3D_Util.so
Quand j'ai lié la première librairie partagée à l'exécutable, j'ai défini le chemin dans les options pour l'éditeur de lien pour /home/philippe/A3D_Debug/libA3D_Core.so
Le programme se compilait et s'exécutait sans problème.
Ensuite quand j'ai créé la deuxième librairie partagée et que je l'ai liée avec la première librairie partagée en définissant les options pour l'éditeur de lien pour /home/philippe/A3D_Debug/libA3D_Util.so, je pouvais compiler et lier la première librairie sans problème. Mais quand je construit l'exécutable, j'ai ce message:
||warning: ../../A3D_Debug/libA3D_Util.so, needed by /home/philippe/A3D_Debug/libA3D_Core.so, not found (try using -rpath or -rpath-link)|
/home/philippe/A3D_Debug/libA3D_Core.so||undefined reference to `A3D::Util::ToString(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&)'|
||=== Build finished: 1 errors, 1 warnings ===|
dans les options pour libA3D_Core.so j'ai essayé de définir la librairie utilitaire en chemin absolu et en chemin non absolu, même résultat.
J'ai essayé en mettant A3D_Util dans l'option pour les librairies de l'éditeur et lien et mettre le chemin dans les répertoires de recherche pour l'éditeur de lien. Je sais compiler A3D_Core, mais quand je recompile mon exécutable, me dis:
||=== TestApplication, Debug ===|
||warning: ../../A3D_Debug/libA3D_Util.so, needed by /home/philippe/A3D_Debug/libA3D_Core.so, not found (try using -rpath or -rpath-link)|
||=== Build finished: 0 errors, 1 warnings ===|
Cette librairie est dans le même répertoire que l'exécutable. Le répertoire pour rechercher les librairies est définis dans les options de l'éditeur de lien pour l'exécutable (comme c'est le même répertoire que l'autre librairie).
Quand le lance l'exécutable, me dis qu'il peut pas trouver la librairie libA3D_Util.so
J'ai même définit le répertoire /home/philippe/A3D_Debug dans le fichier ld.so.conf
Est ce qu'il y a d'autres options à définir quand on lie une librairie partagée qui se lie elle même à une autre librairie partagée ?
Partager