LDD не может найти библиотеку по биту sol11_64

Мы успешно компилировали с gcc на Solaris 10. Теперь мы переносим на 64-битную версию на Solaris 11 (sol11_64). Мы используем библиотеку, разработанную собственными силами под названием MSP, и используем -wl, rpath (эквивалентно -R... также пытался с -R) во время компиляции, чтобы указать расположение библиотеки времени выполнения. На sol10 вывод LDD показывает 2 из 2 найденных библиотек MSP. На sol11_64 теперь есть 3 библиотеки, показанные в выводе LDD, с новой, которую невозможно найти, даже если она находится в том же месте, что и одна из других. Если я добавлю это местоположение в свой LD_LIBRARY_PATH, то LDD поднимет его. Мы НЕ хотим использовать LD_LIBRARY_PATH в качестве постоянного решения.

выход sol10 LDD:

    libmsp.so =>     /opt/msp/lib/fiorano/libmsp.so
    libfmq-crtl.so =>        /opt/msp/lib/fiorano/vendor-files/lib/libfmq-crtl.so

Вывод sol11_64 LDD:

    libmsp.so =>     /opt/msp/lib/fiorano/libmsp.so
    libfmq-crtl.so =>        /opt/msp/lib/fiorano/vendor-files/lib/libfmq-crtl.so
    libfmq-crtl-ssl.so =>    (file not found)

Вывод sol11_64 LDD с путем в LD_LIBRARY_PATH:

    libmsp.so =>     /opt/msp/lib/fiorano/libmsp.so
    libfmq-crtl.so =>        /opt/msp/lib/fiorano/vendor-files/lib/libfmq-crtl.so
    libfmq-crtl-ssl.so =>    /opt/msp/lib/fiorano/vendor-files/lib/libfmq-crtl-ssl.so

Я проверил разрешения:

-rwxr-xr-x   1 root     root        2.0M Dec 18 17:49 libfmq-crtl-ssl.so*
-rwxr-xr-x   1 root     root        2.0M Dec 18 17:49 libfmq-crtl.so*

1 ответ

Решение

Поскольку эта библиотека неожиданно стала новой зависимостью от sol11_64, мне нужно было добавить ее в другое место нашего make-файла, в частности, в нашу переменную LIBS, которая передается во время компоновки вместе с путями библиотеки времени выполнения. Я думаю, что эта часть говорит о том, какие библиотеки на самом деле искать.

До:

LIBS := -lpthread -lmsp -lfmq-crtl -lxml2

После:

LIBS := -lpthread -lmsp -lfmq-crtl -lfmq-crtl-ssl -lxml2

цель makefile:

$(EXE): $(MACHOBJ) $(MACH)/main.o
    cd $(MACH); $(CC) -o ../$@ $(OBJ) main.o \
    ../../lib/$(MACH)/libmain.a \
    -L/opt/msp/lib/fiorano \
    -L/opt/msp/lib/fiorano/vendor-files/lib \
    -R/opt/msp/lib/fiorano \
    -R/opt/msp/lib/fiorano/vendor-files/lib \
    $(MACHLFLAGS) $(LIBS) $(MACHLLIBS)
Другие вопросы по тегам