Привет, я искал тему об ошибке связывания - Ошибка:: неопределенная ссылка на XXX,
Мой код компилируется в SUSE, но не в REDHAT, буду признателен, если кто-нибудь может пролить свет на это. Я не нашел другой пост, конкретно соответствующий моей ситуации (может быть, я пропустил), есть очень близкий (Связывание с динамической библиотекой с зависимостями). Я пытался, однако я все еще натыкаюсь на камни.
Фон: у меня есть child.cpp, который использует parent.cpp, поэтому я включил parent.h в child.cpp.
символ (XXX) в родительском элементе содержится в libA.so
>> nm -C libA.so | egrep XXX
000000000013eb0 T NS::XXX(char const*, char const*, char const*)
Есть еще одна библиотека, которая использует родителя, назовем ее 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, он жалуется на undefine XXX, поэтому мне также нужно сделать libA
g++ child.cpp -o child -I. -L. -lB -lA
Я не понимаю, почему есть разница. Я попробовал варианты, предложенные в (Связывание с динамической библиотекой с зависимостями). Мне все еще нужно связать libA при компиляции.
-Wl,--unresolved-symbols=ignore-in-shared-libs
-Wl,--as-needed
XXXиlibA.soиlibB.soявляются. Прочтите также Как писать общие библиотеки Дреппера. - person Basile Starynkevitch   schedule 24.09.2018libB.soили использовать разные команды в SuSE и RedHat. Возможно, вам следует спросить, как определить дистрибутив, на котором вы работаете (и это делает другой вопрос) - person Basile Starynkevitch   schedule 25.09.2018libB.soссылается на/export/data/NS/lib/libA.so, но ваши командные строки используют-L...и/export/data/NS/libссылаются на один и тот же каталог? - person Maxim Egorushkin   schedule 25.09.2018