У меня есть следующая структура проекта, где libb.so зависит от liba.so, libc.so зависит от libb.so и libd.so зависит от libc.so
abcd
├── a
│ ├── lib.cpp
│ ├── lib.o
│ └── liba.so
├── b
│ ├── lib.cpp
│ ├── lib.o
│ └── libb.so
├── c
│ ├── lib.cpp
│ ├── lib.o
│ └── libc.so
└── d
├── lib.cpp
├── lib.o
└── libd.so
Я компилирую все вышеуказанные библиотеки, как показано ниже
liba.so
gcc -c -Wall -fPIC lib.cpp
gcc -shared -o liba.so lib.o
libb.so
gcc -c -Wall -fPIC lib.cpp
gcc -shared -o libb.so lib.o -L../a -la
libc.so
gcc -c -Wall -fPIC lib.cpp
gcc -shared -o libc.so lib.o -L../b -Wl,-rpath-link=$(pwd)../a -lb
libd.so
gcc -c -Wall -fPIC lib.cpp
Чтобы сгенерировать libd.so, какая из приведенных ниже команд является правильной? На данный момент обе команды создают libd.so, но хотелось бы узнать идиоматическую.
gcc -shared -o libd.so lib.o -L../c -Wl,-rpath-link=$(pwd)../b -Wl,-rpath-link=$(pwd)../a -lc
Или
gcc -shared -o libd.so lib.o -L../c -Wl,-rpath-link=$(pwd)../b -lc
Подробнее здесь: https://stackoverflow.com/questions/798 ... e-necessar