如何使用自定义 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)
这不是一个好的解决方案,但对我来说是一个足够好的解决方法。
我写了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
我已经这样修补了配置文件:
行 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"
以这种方式(我很确定它非常粗糙和过多)我已经实现了 ldd 显示到我的 openssl 库的链接。对它们进行硬编码是个坏主意,但是当发行版中没有这样的路径时,我希望 ld 在我们计划放置它们的本地目录中找到它们。
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
。
我需要在 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)
这不是一个好的解决方案,但对我来说是一个足够好的解决方法。
我写了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
我已经这样修补了配置文件:
行 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"
以这种方式(我很确定它非常粗糙和过多)我已经实现了 ldd 显示到我的 openssl 库的链接。对它们进行硬编码是个坏主意,但是当发行版中没有这样的路径时,我希望 ld 在我们计划放置它们的本地目录中找到它们。
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
。