我们已经在 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*
答案1
由于这个库突然成为 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)