如何使用自定义 libopenssl 构建 openldap

How to build openldap with custom libopenssl

我需要在 linux(和 windows 下构建 libldap,但这是另一回事)。

当我做的时候

./configure --prefix="$OPENLDAP_BUILD_PATH" --disable-slapd
make
make install
make clean

我了解到 ldd libldap 是 link 系统库 libssl.so 和 libcrypto.so。我需要的是 link 它与我自定义构建的这个库。

我也试过这个:

OPENLDAP2_BUILD_PATH="$BUILD_PATH/openldap2"
mkdir "$OPENLDAP2_BUILD_PATH"

OPENSSL_DEPENDENCY_PATH="$BUILD_PATH/openssl"

LD_LIBRARY_PATH="$OPENSSL_DEPENDENCY_PATH/lib:$LD_LIBRARY_PATH"
CPPFLAGS="-l$OPENSSL_DEPENDENCY_PATH/include/openssl"
LDFLAGS="-L$OPENSSL_DEPENDENCY_PATH/lib"

./configure --prefix="$OPENLDAP2_BUILD_PATH" --disable-slapd
make
make install
make clean

也没有成功。

ldd libldap.so 显示:

linux-vdso.so.1 =>  (0x00007ffc91923000)
liblber-2.4.so.2 => /home/me/Work-U14/proj/shared/BUILD/openldap2/lib/liblber-2.4.so.2 (0x00007ff0ef638000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007ff0ef3f8000)
libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007ff0ef198000)
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007ff0eedbc000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff0ee9f4000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff0ee7ef000)
/lib64/ld-linux-x86-64.so.2 (0x000056386adf5000)

这不是一个好的解决方案,但对我来说是一个足够好的解决方法。

  1. 我写了build.sh如下:

    #!/bin/sh

    if [ -z "$BUILD_PATH" ] 然后 回声 "Variable BUILD_PATH isn't specified!" 出口 fi

    OPENLDAP2_BUILD_PATH="$BUILD_PATH/openldap2"

    导出 MY_OPENSSL_ROOT="$BUILD_PATH/openssl"

    ./configure --prefix=$OPENLDAP2_BUILD_PATH --disable-slapd >/home/sherst/Desktop/configure_log.openldap2 2>&1 制作 >/home/sherst/Desktop/make_log.openldap2 2>&1 安装 >/home/sherst/Desktop/make_install_log.openldap2 2>&1

  2. 我已经这样修补了配置文件:

行 15485 LIBS="-Wl,-rpath=$ORIGIN/ -L. -lssl -lcrypto $LIBS"

行 15582 TLS_LIBS="-Wl,-rpath=$MY_OPENSSL_ROOT/lib -L$MY_OPENSSL_ROOT/lib -lssl -lcrypto -lRSAglue -lrsaref"

行 15584 TLS_LIBS="-Wl,-rpath=$MY_OPENSSL_ROOT/lib -L$MY_OPENSSL_ROOT/lib -lssl -lcrypto"

  1. 以这种方式(我很确定它非常粗糙和过多)我已经实现了 ldd 显示到我的 openssl 库的链接。对它们进行硬编码是个坏主意,但是当发行版中没有这样的路径时,我希望 ld 在我们计划放置它们的本地目录中找到它们。

  2. openldap 常见问题 says 这应该是这样实现的:

    env CPPFLAGS=-I/path/to/openssl/include\ LDFLAGS=-L/path/to/openssl/lib-dir\ 配置--with-tls ...

但这对我不起作用(也许我做错了)。

发现下面可以工作: export LDFLAGS="-L/your/dir/to/openssl/lib" export CPPFLAGS="-I/your/dir/to/openssl/include" ./configure ... 可以工作,包含路径是: -I/your/dir/to/openssl/include NOT -I/your/dir/to/openssl/include/openssl
其中 .h 头文件都在 include 下的子 openssl 目录中, 关键是摆脱 include 目录下的 openssl 目录,默认情况下,对于其他包,我们必须在 include 下添加这个子目录,例如对于 apr,您必须将其设为:-I/your/dir/to/apr/include/apr-1