Solaris

LDD 在 sol11_64 位上找不到庫

  • February 5, 2019

我們已經在 Solaris 10 上成功使用 gcc 進行編譯。現在我們在 Solaris 11 (sol11_64) 上移植到 64 位。我們使用內部開發的名為 MSP 的庫,並在編譯期間使用 -wl,rpath(等效於 -R… 也嘗試使用 -R)來指定執行時庫的位置。在 sol10 上,LDD 的輸出顯示找到了 2 個 MSP 庫中的 2 個。在 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 的新依賴,我需要將它添加到我們的 makefile 中的其他位置,特別是我們的 LIBS 變數,該變數在連結期間與執行時庫路徑一起傳入。我認為這部分告訴它實際尋找哪些庫。

前:

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

後:

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

生成文件目標:

$(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)

引用自:https://serverfault.com/questions/952271