Bonjour,
Nouveau sur Mac, je ne parviens pas à spécifier au moment de l'édition de liens le chemin qui sera utilisé pour chercher une library dynamique.
Quelque chose doit m'échapper... Mon OS est Snow Léopard. Par exemple :
Fichier foo/foo.hpp :
Fichier foo/foo.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #ifndef _FOO_HPP #define _FOO_HPP #include <iostream> using namespace std; void foo(); #endif
Le fichier main/main.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #include "foo.hpp" void foo(){ cout << "hello world." << endl; }
et voici les commandes que j'utilise :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #include "foo.hpp" int main(){ foo(); }
Jusqu'ici tout va bien, les commandes ont réussies.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #creating foo library cd foo g++ -fPIC -c foo.cpp g++ -dynamiclib -install_name libfoo.dylib -o libfoo.dylib foo.o cd .. #linking with foo library cd main g++ -fPIC -I../foo -c main.cpp g++ -undefined dynamic_lookup main.o -L../foo -Wl,-rpath,../foo -lfoo -o main ./main
Si je regarde avec otool :
Je vois que le chemin donné avec -rpath n'est pas pris en compte :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 otool -L main
Si j'exécute :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 main: libfoo.dylib (compatibility version 0.0.0, current version 0.0.0) /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)
La library n'est pas trouvée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ./main
Si maintenant je copie la library dans le répertoire d'éxecution, l'éxecution se déroule correctement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 dyld: Library not loaded: libfoo.dylib Referenced from: (...)/main/./main Reason: image not found Trace/BPT trap
Quelques infos supplémentaires :
Quelle est la bonne option à utiliser? Merci d'avance à ceux qui pourront m'orienter vers la solution!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 uname -a Darwin mp-57052 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386 g++ -v Using built-in specs. Target: i686-apple-darwin10 Configured with: /var/tmp/gcc/gcc-5666.3~6/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1 Thread model: posix gcc version 4.2.1 (Apple Inc. build 5666) (dot 3)
David
Partager