LDD 在 sol11_64 位上找不到库

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*

答案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)

相关内容