неразрешенный символ g ++ при связывании RedHat и SUSE - PullRequest
0 голосов
/ 24 сентября 2018

Привет! Я искал тему об ошибке компоновки - Ошибка :: неопределенная ссылка на XXX,

Мой код скомпилирован на SUSE, но не на REDHAT, спасибо, если кто-нибудь может показать мне немного этого.Я не нашел другой пост, специально соответствующий моей ситуации (может быть, я пропустил), он очень близок ( Связь с динамической библиотекой с зависимостями ).Я пытался, однако я все еще бью по камням.

Справочная информация: у меня есть child.cpp, который использует parent.cpp, поэтому я включил parent.h в символ child.cpp

(XXX) в parent содержится в libA.so

>> nm -C libA.so | egrep XXX
000000000013eb0 T NS::XXX(char const*, char const*, char const*)

Есть еще одна библиотека, которая использует parent, назовем его libB.so

>> nm -C  libB.so | egrep XXX
000000000000000 U NS::XXX(char const*, char const*, char const*)

, но libB.so имеет ссылку на libA.so

>> ldd libB.so | grep libA.so
libB.so => /export/data/NS/lib/libA.so (0x00007fbc0a9bf000)

Когда я делаю ссылку на SUSE, ниже компилируется

g++ child.cpp -o child -I. -L. -lB

Когда я делаю ссылку на RHEL, он жалуется на неопределенность XXX, поэтому я также должен выполнить libA

g++ child.cpp -o child -I. -L. -lB -lA

Я не понимаю, почему есть разница.Я попробовал варианты, предложенные в ( Связывание с динамической библиотекой с зависимостями ).Мне все еще нужно связать libA при компиляции.

-Wl,--unresolved-symbols=ignore-in-shared-libs
-Wl,--as-needed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...