Solaris
LDD 在 sol11_64 位上找不到庫
我們已經在 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)