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