Что происходит, что A.so не знает, что конечные символы могут быть получены из libnite.so, поэтому, когда он пытается разрешить символы он не знает, искать в этой библиотеке, и ничто в среде не говорит, что оно загружает эту библиотеку, чтобы искать символы.
Два решения:
(1) Рекомпилированный A.so с явной зависимостью от Nite 1.3, так что при компиляции вы:
g++ -o A.so <files making up A.so> -L<DIRECTORY OF NITE> -Wl,-rpath <DIRECTORY OF NITE> -lnite
Если libnite.so
находится в одном из стандартных мест, то вы должны упустить опции -L
и -Wl,-rpath
. Это заставит вашу библиотеку явно зависеть от libnite.
(2) ссылка на libnite.so при компиляции B
, поэтому ссылка линия должна добавить:
-L<DIRECTORY OF NITE> -Wl,-rpath <DIRECTORY OF NITE> -lnite
В качестве дополнения, если у вас есть .h
файлов, но не имеет соответствующий .a
или .so
для реализации, тогда вам нужно будет решить эту проблему, прежде чем сможете использовать A.so
.
как, например, если libnite.so
в /usr/local/lib
, то вам необходимо будет добавить:
-L/usr/local/lib -Wl,-rpath /usr/local/lib -lnite
линии компиляции, так что он знает, где искать библиотеки в компиляции времени (-L
опция) , и во время выполнения (опция -Wl,-rpath
).