使用 --enable-ssl 编译失败,但如果未指定则可以运行

Compiling with --enable-ssl fails but works if not specified

我正在编译旧版本的 Squid,2.6 版。我需要使用 ssl 支持来编译它,所以我 compiled/installed 来自源代码的 openssl 版本 1.0.2n。我安装在 /usr/local/ssl

所以我使用./configure -prefix=/opt/squid --with-openssl=/usr/local/ssl编译了Squid。 make 成功。

但是,当我使用./configure -prefix=/opt/squid --with-openssl=/usr/local/ssl --enable-ssl编译它时,遇到了以下错误。

gcc -DHAVE_CONFIG_H -DDEFAULT_CONFIG_FILE=\"/opt/squid/etc/squid.conf\" -I. -I../include -I. -I. -I../include -I../include  -I/usr/local/ssl/include   -Wall -g -O2 -MT auth_modules.o -MD -MP -MF .deps/auth_modules.Tpo -c -o auth_modules.o auth_modules.c
mv -f .deps/auth_modules.Tpo .deps/auth_modules.Po
gcc -DHAVE_CONFIG_H -DDEFAULT_CONFIG_FILE=\"/opt/squid/etc/squid.conf\" -I. -I../include -I. -I. -I../include -I../include  -I/usr/local/ssl/include   -Wall -g -O2 -MT store_modules.o -MD -MP -MF .deps/store_modules.Tpo -c -o store_modules.o store_modules.c
mv -f .deps/store_modules.Tpo .deps/store_modules.Po
gcc -DHAVE_CONFIG_H -DDEFAULT_CONFIG_FILE=\"/opt/squid/etc/squid.conf\" -I. -I../include -I. -I. -I../include -I../include  -I/usr/local/ssl/include   -Wall -g -O2 -MT string_arrays.o -MD -MP -MF .deps/string_arrays.Tpo -c -o string_arrays.o string_arrays.c
mv -f .deps/string_arrays.Tpo .deps/string_arrays.Po
gcc  -Wall -g -O2  -g -o squid access_log.o acl.o asn.o authenticate.o cache_cf.o CacheDigest.o cache_manager.o carp.o cbdata.o client_db.o client_side.o comm.o comm_epoll.o debug.o  disk.o dns_internal.o errorpage.o event.o errormap.o external_acl.o fd.o filemap.o forward.o fqdncache.o ftp.o gopher.o helper.o  http.o HttpStatusLine.o HttpHdrCc.o HttpHdrRange.o HttpHdrContRange.o HttpHeader.o HttpHeaderTools.o HttpBody.o HttpMsg.o HttpReply.o HttpRequest.o icmp.o icp_v2.o icp_v3.o ident.o internal.o ipc.o ipcache.o  locrewrite.o logfile.o main.o mem.o MemPool.o MemBuf.o mime.o multicast.o neighbors.o net_db.o Packer.o pconn.o peer_digest.o peer_monitor.o peer_select.o peer_sourcehash.o peer_userhash.o redirect.o referer.o refresh.o send-announce.o  ssl.o ssl_support.o stat.o StatHist.o String.o stmem.o store.o store_io.o store_client.o store_digest.o store_dir.o store_key_md5.o store_log.o store_rebuild.o store_swapin.o store_swapmeta.o store_swapout.o tools.o unlinkd.o url.o urn.o useragent.o wais.o wccp.o wccp2.o whois.o  repl_modules.o auth_modules.o store_modules.o globals.o string_arrays.o -L../lib repl/liblru.a fs/libufs.a auth/libbasic.a -lcrypt -L/usr/local/ssl/lib -lssl -lcrypto -lmiscutil -lm -lnsl
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup':
dso_dlfcn.c:(.text+0x11): undefined reference to `dlopen'
dso_dlfcn.c:(.text+0x24): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x2f): undefined reference to `dlclose'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_func':
dso_dlfcn.c:(.text+0x334): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x3db): undefined reference to `dlerror'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_bind_var':
dso_dlfcn.c:(.text+0x454): undefined reference to `dlsym'
dso_dlfcn.c:(.text+0x4fb): undefined reference to `dlerror'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_load':
dso_dlfcn.c:(.text+0x569): undefined reference to `dlopen'
dso_dlfcn.c:(.text+0x5cb): undefined reference to `dlclose'
dso_dlfcn.c:(.text+0x603): undefined reference to `dlerror'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_pathbyaddr':
dso_dlfcn.c:(.text+0x69f): undefined reference to `dladdr'
dso_dlfcn.c:(.text+0x709): undefined reference to `dlerror'
/usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_unload':
dso_dlfcn.c:(.text+0x762): undefined reference to `dlclose'
collect2: error: ld returned 1 exit status
Makefile:701: recipe for target 'squid' failed
make[3]: *** [squid] Error 1
make[3]: Leaving directory '/usr/local/src/squid-2.6.STABLE24/src'
Makefile:884: recipe for target 'all-recursive' failed
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory '/usr/local/src/squid-2.6.STABLE24/src'
Makefile:609: recipe for target 'all' failed
make[1]: *** [all] Error 2
make[1]: Leaving directory '/usr/local/src/squid-2.6.STABLE24/src'
Makefile:302: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1

我不确定如何找出问题以及如何解决它。

更新: 我通过使用 --with-dl 弄明白了:)

您有未解析的 dll 函数引用,您的构建需要包含 -ldl 以解析它们

您需要检查您的配置脚本是否支持使用 LDFLAGS 添加新的链接器标志,然后您可以尝试使用 ./configure -prefix=/opt/squid --with-openssl=[=15 进行编译=] LDFLAGS="-ldl"