Witam
Problem mam sfomułowany następująco:
Pliki:
- a.cpp, a.h, atest.cpp
- b.cpp, b.h
- plik a.cpp kompiluję do biblioteki liba.so
- plik b.cpp kompiluję do biblioteki libb.so
- funkcja af01 zdefiniowana w a.cpp korzysta z funkcji bf01 zdefiniowanej w b.cpp
- atest.cpp kompiluję do programu wykonywalnego, który odwołuje się do af01 a więc pośrednio do bf01
No i kompilator komunikuje o błędzie przy kompilacji atest.cpp:
mormegil@devel-1:/vol/cuma/sandbox$ g++ -Wall -L/vol/cuma/sandbox atest.cpp -la -o atest
/vol/cuma/sandbox/liba.so: undefined reference to `bf01(int)'
Jak poprawnie zbudować bibliotekę liba.so ?
Jak dotąd robiłem to tak:
mormegil@devel-1:/vol/cuma/sandbox$ g++ -Wall -fPIC -c a.cpp
mormegil@devel-1:/vol/cuma/sandbox$ g++ -shared -W1,-soname,liba.so.1 -o liba.so.1.0 a.o -L/vol/cuma/sandbox/ -lb
mormegil@devel-1:/vol/cuma/sandbox$ ln -sf /vol/cuma/sandbox/liba.so.1.0 /vol/cuma/sandbox/liba.so
mormegil@devel-1:/vol/cuma/sandbox$ ln -sf /vol/cuma/sandbox/liba.so.1.0 /vol/cuma/sandbox/liba.so.1
no i :
mormegil@devel-1:/vol/cuma/sandbox$ g++ -Wall -L/vol/cuma/sandbox atest.cpp -la -o atest
Jeżeli funkcja af01 nie odwołuje się do funkcji w bibliotece libb.so, to atest.cpp kompiluje się i uruchamia bez problemu.
Pozdrawiam
Cuma