1、准备安装程序:
apr-1.6.2.tar.gz
apr-util-1.6.0.tar.gz
expat-2.2.4.tar.bz
httpd-2.4.27.tar.gz
openssl-1.1.0f.tar.gz
pcre-8.41.tar.gz
2、依次解压缩:
tar -xvf apr-1.6.2.tar.gz
tar -xvf apr-util-1.6.0.tar.gz
tar -xvf expat-2.2.4.tar.bz
tar -xvf httpd-2.4.27.tar.gz
tar -xvf pcre-8.41.tar.gz
3、安装openSSL
tar -xvf openssl-1.1.0f.tar.gz
cd openssl-1.1.0f
./config shared zlib-dynamic--prefix=/usr/local/openssl
make
make install
mv /usr/bin/openssl/usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
新建so文件的软连接,这里需要注意先找到so文件的地址才能知道软链接的地址
比如有的人是
ln -s /usr/lib64/libssl.so.1.1 /usr/local/lib64/libssl.so.1.1
ln -s /usr/lib64/libcrypto.so.1.1 /usr/local/lib64/libcrypto.so.1.1
但是我发现自己服务器执行失败,于是查找so地址
find / -name "libssl.so.1.1"
发现安装地址有差异:
[root$tgpmsidc39 lib64]# find / -name "libssl.so.1.1"
/soft/openssl-1.1.0f/libssl.so.1.1
/usr/local/openssl/lib/libssl.so.1.1
那么很明显,我们的命令应该修改为:
ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
让so生效,具体原理请Google一下:
echo " /usr/lib64 ">> /etc/ld.so.conf
查看一下路径是否写入
[root$tgpmsidc39 lib64]# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/lib64
写入了文件,则使之生效
ldconfig –v
或者ldconfig –v |grep libssl
有的人执行 ldconfig –v ,会报错,请修改加上绝对路径:
/sbin/ldconfig -v |grep libssl
如果有1.1版本的so信息则没问题
安装APR
tar -xvzf apr-1.6.2.tar.gz
cd apr-1.6.2
./configure --prefix=/usr/lcoal/apr
make
make install
tar -xvzf expat-2.2.4.tar.gz
cd expat-2.2.4
./configure
make
make install
安装apr-util
tar -xvzf apr-util-1.6.0.tar.gz
cd apr-util-1.6.0
发现系统报错:
[root$tgpmsidc39 apr-util-1.6.0]# ./configure
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking for working mkdir -p... yes
APR-util Version: 1.6.0
checking for chosen layout... apr-util
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
Applying apr-util hints file rules for x86_64-pc-linux-gnu
checking for APR... no
configure: error: APR could not be located. Please use the --with-apr option.
重新来过:
./configure --with-apr=/usr/local/apr/bin/apr-1-config --with-lib=/usr/local/apr/lib
成功!
make
make install
安装pcre
tar -xvf pcre-8.41.tar.gz
cd pcre-8.41
这里安装需要指定路径
./configure --prefix=/usr/local/pcre
make
make install
安装apache
tar -xvf httpd-2.4.27.tar.gz
cd httpd-2.4.27
./configure --prefix=/usr/local/apache2.4.27 --enable-mods-shared=all --with-ssl=/usr/local/openssl --with-apr=/usr/local/apr --with-pcre=/usr/local/pcre --with-expat=/usr/local/expat
make编译阶段报错如上:
exports.c:1902: 错误:‘ap_hack_apr_md4’ 重定义
exports.c:1080: 错误:‘ap_hack_apr_md4’ 的上一个定义在此
exports.c:1907: 错误:‘ap_hack_apr_md5_init’ 重定义
exports.c:1085: 错误:‘ap_hack_apr_md5_init’ 的上一个定义在此
exports.c:1908: 错误:‘ap_hack_apr_md5_set_xlate’ 重定义
exports.c:1086: 错误:‘ap_hack_apr_md5_set_xlate’ 的上一个定义在此
exports.c:1909: 错误:‘ap_hack_apr_md5_update’ 重定义
exports.c:1087: 错误:‘ap_hack_apr_md5_update’ 的上一个定义在此
exports.c:1910: 错误:‘ap_hack_apr_md5_final’ 重定义
exports.c:1088: 错误:‘ap_hack_apr_md5_final’ 的上一个定义在此
exports.c:1911: 错误:‘ap_hack_apr_md5’ 重定义
exports.c:1089: 错误:‘ap_hack_apr_md5’ 的上一个定义在此
exports.c:1912: 错误:‘ap_hack_apr_md5_encode’ 重定义
exports.c:1090: 错误:‘ap_hack_apr_md5_encode’ 的上一个定义在此
exports.c:1913: 错误:‘ap_hack_apr_password_validate’ 重定义
exports.c:1091: 错误:‘ap_hack_apr_password_validate’ 的上一个定义在此
exports.c:1918: 错误:‘ap_hack_apr_memcache_hash’ 重定义
exports.c:1096: 错误:‘ap_hack_apr_memcache_hash’ 的上一个定义在此
exports.c:1919: 错误:‘ap_hack_apr_memcache_hash_crc32’ 重定义
exports.c:1097: 错误:‘ap_hack_apr_memcache_hash_crc32’ 的上一个定义在此
exports.c:1920: 错误:‘ap_hack_apr_memcache_hash_default’ 重定义
exports.c:1098: 错误:‘ap_hack_apr_memcache_hash_default’ 的上一个定义在此
exports.c:1921: 错误:‘ap_hack_apr_memcache_find_server_hash’ 重定义
exports.c:1099: 错误:‘ap_hack_apr_memcache_find_server_hash’ 的上一个定义在此
exports.c:1922: 错误:‘ap_hack_apr_memcache_add_server’ 重定义
exports.c:1100: 错误:‘ap_hack_apr_memcache_add_server’ 的上一个定义在此
exports.c:1923: 错误:‘ap_hack_apr_memcache_find_server’ 重定义
exports.c:1101: 错误:‘ap_hack_apr_memcache_find_server’ 的上一个定义在此
exports.c:1924: 错误:‘ap_hack_apr_memcache_enable_server’ 重定义
exports.c:1102: 错误:‘ap_hack_apr_memcache_enable_server’ 的上一个定义在此
exports.c:1925: 错误:‘ap_hack_apr_memcache_disable_server’ 重定义
exports.c:1103: 错误:‘ap_hack_apr_memcache_disable_server’ 的上一个定义在此
exports.c:1926: 错误:‘ap_hack_apr_memcache_server_create’ 重定义
exports.c:1104: 错误:‘ap_hack_apr_memcache_server_create’ 的上一个定义在此
exports.c:1927: 错误:‘ap_hack_apr_memcache_create’ 重定义
exports.c:1105: 错误:‘ap_hack_apr_memcache_create’ 的上一个定义在此
exports.c:1928: 错误:‘ap_hack_apr_memcache_getp’ 重定义
exports.c:1106: 错误:‘ap_hack_apr_memcache_getp’ 的上一个定义在此
exports.c:1929: 错误:‘ap_hack_apr_memcache_add_multget_key’ 重定义
exports.c:1107: 错误:‘ap_hack_apr_memcache_add_multget_key’ 的上一个定义在此
exports.c:1930: 错误:‘ap_hack_apr_memcache_multgetp’ 重定义
exports.c:1108: 错误:‘ap_hack_apr_memcache_multgetp’ 的上一个定义在此
exports.c:1931: 错误:‘ap_hack_apr_memcache_set’ 重定义
exports.c:1109: 错误:‘ap_hack_apr_memcache_set’ 的上一个定义在此
exports.c:1932: 错误:‘ap_hack_apr_memcache_add’ 重定义
exports.c:1110: 错误:‘ap_hack_apr_memcache_add’ 的上一个定义在此
exports.c:1933: 错误:‘ap_hack_apr_memcache_replace’ 重定义
exports.c:1111: 错误:‘ap_hack_apr_memcache_replace’ 的上一个定义在此
exports.c:1934: 错误:‘ap_hack_apr_memcache_delete’ 重定义
exports.c:1112: 错误:‘ap_hack_apr_memcache_delete’ 的上一个定义在此
exports.c:1935: 错误:‘ap_hack_apr_memcache_incr’ 重定义
exports.c:1113: 错误:‘ap_hack_apr_memcache_incr’ 的上一个定义在此
exports.c:1936: 错误:‘ap_hack_apr_memcache_decr’ 重定义
exports.c:1114: 错误:‘ap_hack_apr_memcache_decr’ 的上一个定义在此
exports.c:1937: 错误:‘ap_hack_apr_memcache_version’ 重定义
exports.c:1115: 错误:‘ap_hack_apr_memcache_version’ 的上一个定义在此
exports.c:1938: 错误:‘ap_hack_apr_memcache_stats’ 重定义
exports.c:1116: 错误:‘ap_hack_apr_memcache_stats’ 的上一个定义在此
exports.c:1943: 错误:‘ap_hack_apr_dynamic_fn_register’ 重定义
exports.c:1179: 错误:‘ap_hack_apr_dynamic_fn_register’ 的上一个定义在此
exports.c:1944: 错误:‘ap_hack_apr_dynamic_fn_retrieve’ 重定义
exports.c:1180: 错误:‘ap_hack_apr_dynamic_fn_retrieve’ 的上一个定义在此
exports.c:1949: 错误:‘ap_hack_apr_optional_hook_add’ 重定义
exports.c:1185: 错误:‘ap_hack_apr_optional_hook_add’ 的上一个定义在此
exports.c:1950: 错误:‘ap_hack_apr_optional_hook_get’ 重定义
exports.c:1186: 错误:‘ap_hack_apr_optional_hook_get’ 的上一个定义在此
exports.c:1956: 错误:‘ap_hack_apr_queue_create’ 重定义
exports.c:1323: 错误:‘ap_hack_apr_queue_create’ 的上一个定义在此
exports.c:1957: 错误:‘ap_hack_apr_queue_push’ 重定义
exports.c:1324: 错误:‘ap_hack_apr_queue_push’ 的上一个定义在此
exports.c:1958: 错误:‘ap_hack_apr_queue_pop’ 重定义
exports.c:1325: 错误:‘ap_hack_apr_queue_pop’ 的上一个定义在此
exports.c:1959: 错误:‘ap_hack_apr_queue_trypush’ 重定义
exports.c:1326: 错误:‘ap_hack_apr_queue_trypush’ 的上一个定义在此
exports.c:1960: 错误:‘ap_hack_apr_queue_trypop’ 重定义
exports.c:1327: 错误:‘ap_hack_apr_queue_trypop’ 的上一个定义在此
exports.c:1961: 错误:‘ap_hack_apr_queue_size’ 重定义
exports.c:1328: 错误:‘ap_hack_apr_queue_size’ 的上一个定义在此
exports.c:1962: 错误:‘ap_hack_apr_queue_interrupt_all’ 重定义
exports.c:1329: 错误:‘ap_hack_apr_queue_interrupt_all’ 的上一个定义在此
exports.c:1963: 错误:‘ap_hack_apr_queue_term’ 重定义
exports.c:1330: 错误:‘ap_hack_apr_queue_term’ 的上一个定义在此
exports.c:1970: 错误:‘ap_hack_apr_reslist_create’ 重定义
exports.c:1351: 错误:‘ap_hack_apr_reslist_create’ 的上一个定义在此
exports.c:1971: 错误:‘ap_hack_apr_reslist_destroy’ 重定义
exports.c:1352: 错误:‘ap_hack_apr_reslist_destroy’ 的上一个定义在此
exports.c:1972: 错误:‘ap_hack_apr_reslist_acquire’ 重定义
exports.c:1353: 错误:‘ap_hack_apr_reslist_acquire’ 的上一个定义在此
exports.c:1973: 错误:‘ap_hack_apr_reslist_release’ 重定义
exports.c:1354: 错误:‘ap_hack_apr_reslist_release’ 的上一个定义在此
exports.c:1974: 错误:‘ap_hack_apr_reslist_timeout_set’ 重定义
exports.c:1355: 错误:‘ap_hack_apr_reslist_timeout_set’ 的上一个定义在此
exports.c:1975: 错误:‘ap_hack_apr_reslist_acquired_count’ 重定义
exports.c:1356: 错误:‘ap_hack_apr_reslist_acquired_count’ 的上一个定义在此
exports.c:1976: 错误:‘ap_hack_apr_reslist_invalidate’ 重定义
exports.c:1357: 错误:‘ap_hack_apr_reslist_invalidate’ 的上一个定义在此
exports.c:1982: 错误:‘ap_hack_apr_rmm_init’ 重定义
exports.c:1363: 错误:‘ap_hack_apr_rmm_init’ 的上一个定义在此
exports.c:1983: 错误:‘ap_hack_apr_rmm_destroy’ 重定义
exports.c:1364: 错误:‘ap_hack_apr_rmm_destroy’ 的上一个定义在此
exports.c:1984: 错误:‘ap_hack_apr_rmm_attach’ 重定义
exports.c:1365: 错误:‘ap_hack_apr_rmm_attach’ 的上一个定义在此
exports.c:1985: 错误:‘ap_hack_apr_rmm_detach’ 重定义
exports.c:1366: 错误:‘ap_hack_apr_rmm_detach’ 的上一个定义在此
exports.c:1986: 错误:‘ap_hack_apr_rmm_malloc’ 重定义
exports.c:1367: 错误:‘ap_hack_apr_rmm_malloc’ 的上一个定义在此
exports.c:1987: 错误:‘ap_hack_apr_rmm_realloc’ 重定义
exports.c:1368: 错误:‘ap_hack_apr_rmm_realloc’ 的上一个定义在此
exports.c:1988: 错误:‘ap_hack_apr_rmm_calloc’ 重定义
exports.c:1369: 错误:‘ap_hack_apr_rmm_calloc’ 的上一个定义在此
exports.c:1989: 错误:‘ap_hack_apr_rmm_free’ 重定义
exports.c:1370: 错误:‘ap_hack_apr_rmm_free’ 的上一个定义在此
exports.c:1990: 错误:‘ap_hack_apr_rmm_addr_get’ 重定义
exports.c:1371: 错误:‘ap_hack_apr_rmm_addr_get’ 的上一个定义在此
exports.c:1991: 错误:‘ap_hack_apr_rmm_offset_get’ 重定义
exports.c:1372: 错误:‘ap_hack_apr_rmm_offset_get’ 的上一个定义在此
exports.c:1992: 错误:‘ap_hack_apr_rmm_overhead_get’ 重定义
exports.c:1373: 错误:‘ap_hack_apr_rmm_overhead_get’ 的上一个定义在此
exports.c:1997: 错误:‘ap_hack_apr_sdbm_open’ 重定义
exports.c:1378: 错误:‘ap_hack_apr_sdbm_open’ 的上一个定义在此
exports.c:1998: 错误:‘ap_hack_apr_sdbm_close’ 重定义
exports.c:1379: 错误:‘ap_hack_apr_sdbm_close’ 的上一个定义在此
exports.c:1999: 错误:‘ap_hack_apr_sdbm_lock’ 重定义
exports.c:1380: 错误:‘ap_hack_apr_sdbm_lock’ 的上一个定义在此
exports.c:2000: 错误:‘ap_hack_apr_sdbm_unlock’ 重定义
exports.c:1381: 错误:‘ap_hack_apr_sdbm_unlock’ 的上一个定义在此
exports.c:2001: 错误:‘ap_hack_apr_sdbm_fetch’ 重定义
exports.c:1382: 错误:‘ap_hack_apr_sdbm_fetch’ 的上一个定义在此
exports.c:2002: 错误:‘ap_hack_apr_sdbm_store’ 重定义
exports.c:1383: 错误:‘ap_hack_apr_sdbm_store’ 的上一个定义在此
exports.c:2003: 错误:‘ap_hack_apr_sdbm_delete’ 重定义
exports.c:1384: 错误:‘ap_hack_apr_sdbm_delete’ 的上一个定义在此
exports.c:2004: 错误:‘ap_hack_apr_sdbm_firstkey’ 重定义
exports.c:1385: 错误:‘ap_hack_apr_sdbm_firstkey’ 的上一个定义在此
exports.c:2005: 错误:‘ap_hack_apr_sdbm_nextkey’ 重定义
exports.c:1386: 错误:‘ap_hack_apr_sdbm_nextkey’ 的上一个定义在此
exports.c:2006: 错误:‘ap_hack_apr_sdbm_rdonly’ 重定义
exports.c:1387: 错误:‘ap_hack_apr_sdbm_rdonly’ 的上一个定义在此
exports.c:2011: 错误:‘ap_hack_apr_sha1_base64’ 重定义
exports.c:1392: 错误:‘ap_hack_apr_sha1_base64’ 的上一个定义在此
exports.c:2012: 错误:‘ap_hack_apr_sha1_init’ 重定义
exports.c:1393: 错误:‘ap_hack_apr_sha1_init’ 的上一个定义在此
exports.c:2013: 错误:‘ap_hack_apr_sha1_update’ 重定义
exports.c:1394: 错误:‘ap_hack_apr_sha1_update’ 的上一个定义在此
exports.c:2014: 错误:‘ap_hack_apr_sha1_update_binary’ 重定义
exports.c:1395: 错误:‘ap_hack_apr_sha1_update_binary’ 的上一个定义在此
exports.c:2015: 错误:‘ap_hack_apr_sha1_final’ 重定义
exports.c:1396: 错误:‘ap_hack_apr_sha1_final’ 的上一个定义在此
exports.c:2024: 错误:‘ap_hack_apr_strmatch_precompile’ 重定义
exports.c:1455: 错误:‘ap_hack_apr_strmatch_precompile’ 的上一个定义在此
exports.c:2030: 错误:‘ap_hack_apr_thread_pool_create’ 重定义
exports.c:1519: 错误:‘ap_hack_apr_thread_pool_create’ 的上一个定义在此
exports.c:2031: 错误:‘ap_hack_apr_thread_pool_destroy’ 重定义
exports.c:1520: 错误:‘ap_hack_apr_thread_pool_destroy’ 的上一个定义在此
exports.c:2032: 错误:‘ap_hack_apr_thread_pool_push’ 重定义
exports.c:1521: 错误:‘ap_hack_apr_thread_pool_push’ 的上一个定义在此
exports.c:2033: 错误:‘ap_hack_apr_thread_pool_schedule’ 重定义
exports.c:1522: 错误:‘ap_hack_apr_thread_pool_schedule’ 的上一个定义在此
exports.c:2034: 错误:‘ap_hack_apr_thread_pool_top’ 重定义
exports.c:1523: 错误:‘ap_hack_apr_thread_pool_top’ 的上一个定义在此
exports.c:2035: 错误:‘ap_hack_apr_thread_pool_tasks_cancel’ 重定义
exports.c:1524: 错误:‘ap_hack_apr_thread_pool_tasks_cancel’ 的上一个定义在此
exports.c:2036: 错误:‘ap_hack_apr_thread_pool_tasks_count’ 重定义
exports.c:1525: 错误:‘ap_hack_apr_thread_pool_tasks_count’ 的上一个定义在此
exports.c:2037: 错误:‘ap_hack_apr_thread_pool_scheduled_tasks_count’ 重定义
exports.c:1526: 错误:‘ap_hack_apr_thread_pool_scheduled_tasks_count’ 的上一个定义在此
exports.c:2038: 错误:‘ap_hack_apr_thread_pool_threads_count’ 重定义
exports.c:1527: 错误:‘ap_hack_apr_thread_pool_threads_count’ 的上一个定义在此
exports.c:2039: 错误:‘ap_hack_apr_thread_pool_busy_count’ 重定义
exports.c:1528: 错误:‘ap_hack_apr_thread_pool_busy_count’ 的上一个定义在此
exports.c:2040: 错误:‘ap_hack_apr_thread_pool_idle_count’ 重定义
exports.c:1529: 错误:‘ap_hack_apr_thread_pool_idle_count’ 的上一个定义在此
exports.c:2041: 错误:‘ap_hack_apr_thread_pool_idle_max_set’ 重定义
exports.c:1530: 错误:‘ap_hack_apr_thread_pool_idle_max_set’ 的上一个定义在此
exports.c:2042: 错误:‘ap_hack_apr_thread_pool_idle_max_get’ 重定义
exports.c:1531: 错误:‘ap_hack_apr_thread_pool_idle_max_get’ 的上一个定义在此
exports.c:2043: 错误:‘ap_hack_apr_thread_pool_thread_max_set’ 重定义
exports.c:1532: 错误:‘ap_hack_apr_thread_pool_thread_max_set’ 的上一个定义在此
exports.c:2044: 错误:‘ap_hack_apr_thread_pool_thread_max_get’ 重定义
exports.c:1533: 错误:‘ap_hack_apr_thread_pool_thread_max_get’ 的上一个定义在此
exports.c:2045: 错误:‘ap_hack_apr_thread_pool_threshold_set’ 重定义
exports.c:1534: 错误:‘ap_hack_apr_thread_pool_threshold_set’ 的上一个定义在此
exports.c:2046: 错误:‘ap_hack_apr_thread_pool_threshold_get’ 重定义
exports.c:1535: 错误:‘ap_hack_apr_thread_pool_threshold_get’ 的上一个定义在此
exports.c:2047: 错误:‘ap_hack_apr_thread_pool_task_owner_get’ 重定义
exports.c:1536: 错误:‘ap_hack_apr_thread_pool_task_owner_get’ 的上一个定义在此
exports.c:2053: 错误:‘ap_hack_apr_uri_port_of_scheme’ 重定义
exports.c:1635: 错误:‘ap_hack_apr_uri_port_of_scheme’ 的上一个定义在此
exports.c:2054: 错误:‘ap_hack_apr_uri_unparse’ 重定义
exports.c:1636: 错误:‘ap_hack_apr_uri_unparse’ 的上一个定义在此
exports.c:2055: 错误:‘ap_hack_apr_uri_parse’ 重定义
exports.c:1637: 错误:‘ap_hack_apr_uri_parse’ 的上一个定义在此
exports.c:2056: 错误:‘ap_hack_apr_uri_parse_hostinfo’ 重定义
exports.c:1638: 错误:‘ap_hack_apr_uri_parse_hostinfo’ 的上一个定义在此
exports.c:2061: 错误:‘ap_hack_apr_uuid_get’ 重定义
exports.c:1663: 错误:‘ap_hack_apr_uuid_get’ 的上一个定义在此
exports.c:2062: 错误:‘ap_hack_apr_uuid_format’ 重定义
exports.c:1664: 错误:‘ap_hack_apr_uuid_format’ 的上一个定义在此
exports.c:2063: 错误:‘ap_hack_apr_uuid_parse’ 重定义
exports.c:1665: 错误:‘ap_hack_apr_uuid_parse’ 的上一个定义在此
exports.c:2068: 错误:‘ap_hack_apr_xlate_open’ 重定义
exports.c:1678: 错误:‘ap_hack_apr_xlate_open’ 的上一个定义在此
exports.c:2069: 错误:‘ap_hack_apr_xlate_sb_get’ 重定义
exports.c:1679: 错误:‘ap_hack_apr_xlate_sb_get’ 的上一个定义在此
exports.c:2070: 错误:‘ap_hack_apr_xlate_conv_buffer’ 重定义
exports.c:1680: 错误:‘ap_hack_apr_xlate_conv_buffer’ 的上一个定义在此
exports.c:2074: 错误:‘ap_hack_apr_xlate_conv_byte’ 重定义
exports.c:1684: 错误:‘ap_hack_apr_xlate_conv_byte’ 的上一个定义在此
exports.c:2075: 错误:‘ap_hack_apr_xlate_close’ 重定义
exports.c:1685: 错误:‘ap_hack_apr_xlate_close’ 的上一个定义在此
exports.c:2080: 错误:‘ap_hack_apr_text_append’ 重定义
exports.c:1690: 错误:‘ap_hack_apr_text_append’ 的上一个定义在此
exports.c:2081: 错误:‘ap_hack_apr_xml_parser_create’ 重定义
exports.c:1691: 错误:‘ap_hack_apr_xml_parser_create’ 的上一个定义在此
exports.c:2082: 错误:‘ap_hack_apr_xml_parse_file’ 重定义
exports.c:1692: 错误:‘ap_hack_apr_xml_parse_file’ 的上一个定义在此
exports.c:2083: 错误:‘ap_hack_apr_xml_parser_feed’ 重定义
exports.c:1693: 错误:‘ap_hack_apr_xml_parser_feed’ 的上一个定义在此
exports.c:2084: 错误:‘ap_hack_apr_xml_parser_done’ 重定义
exports.c:1694: 错误:‘ap_hack_apr_xml_parser_done’ 的上一个定义在此
exports.c:2085: 错误:‘ap_hack_apr_xml_parser_geterror’ 重定义
exports.c:1695: 错误:‘ap_hack_apr_xml_parser_geterror’ 的上一个定义在此
exports.c:2086: 错误:‘ap_hack_apr_xml_to_text’ 重定义
exports.c:1696: 错误:‘ap_hack_apr_xml_to_text’ 的上一个定义在此
exports.c:2087: 错误:‘ap_hack_apr_xml_empty_elem’ 重定义
exports.c:1697: 错误:‘ap_hack_apr_xml_empty_elem’ 的上一个定义在此
exports.c:2088: 错误:‘ap_hack_apr_xml_quote_string’ 重定义
exports.c:1698: 错误:‘ap_hack_apr_xml_quote_string’ 的上一个定义在此
exports.c:2089: 错误:‘ap_hack_apr_xml_quote_elem’ 重定义
exports.c:1699: 错误:‘ap_hack_apr_xml_quote_elem’ 的上一个定义在此
exports.c:2090: 错误:‘ap_hack_apr_xml_insert_uri’ 重定义
exports.c:1700: 错误:‘ap_hack_apr_xml_insert_uri’ 的上一个定义在此
exports.c:2099: 错误:‘ap_hack_apu_version’ 重定义
exports.c:1709: 错误:‘ap_hack_apu_version’ 的上一个定义在此
exports.c:2100: 错误:‘ap_hack_apu_version_string’ 重定义
exports.c:1710: 错误:‘ap_hack_apu_version_string’ 的上一个定义在此
make[2]: *** [exports.lo] 错误 1
make[2]: Leaving directory `/abc/setup/httpd-2.2.17/server'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/abc/setup/httpd-2.2.17/server'
make: *** [all-recursive] 错误 1
解决步骤如下:
./configure --prefix=/usr/local/apache2.4 --enable-mods-shared=all --with-ssl=/usr/local/openssl --with-apr-util=/usr/local/apr/bin/apu-1-config
然后make就不会报错了,安装也会成功了。
另外安装另外一台的时候报错找不到APR
[root$tgpmsidc39 httpd-2.4.27]# ./configure --prefix=/usr/local/apache2.4.27 --enable-mods-shared=all --with-ssl=/usr/local/openssl --with-apr-util=/usr/local/apr/bin/apu-1-config
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
configure:
configure: Configuring Apache Portable Runtime library...
configure:
checking for APR... configure: WARNING: APR version 1.4.0 or later is required, found 1.3.9
configure: WARNING: skipped APR at apr-1-config, version not acceptable
no
configure: error: APR not found. Please read the documentation.
解决办法:
./configure --prefix=/usr/local/apache2.4.27 --enable-mods-shared=all --with-ssl=/usr/local/openssl --with-apr-util=/usr/local/apr/bin/apu-1-config --with-apr=/usr/local/apr/bin/apr-1-config --with-lib=/usr/local/apr/lib
make
make install