当我尝试从源代码编译 tomcat 连接器时,除了没有创建 mod_jk.so 文件之外,一切看起来都很好。
软件版本:RHEL6 x86_64
httpd-2.4.3
tomcat-connector 1.2.37
命令: 制作过程中唯一的警告消息是: 警告!未在 /usr/local/tomcat-connectors-1.2.37-src/native/apache-2.0/mod_jk.la 中找到 dlname。
cd native
./configure --with-apxs=/usr/local/apache2/bin/apxs
make
cd apache-2.0
ls
有人对如何生成 mod_jk.so 文件有什么建议吗?
答案1
我最终让它工作了。结果发现我遇到的问题比 tomcat 连接器更大。
首先,我需要做几件事来使用 64 位 Linux 编译 Apache。我遇到了以下构建错误:
relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
为了解决这个问题,OpenSSL 必须有一个特殊的配置选项:
./configure -fPIC
因此我重新编译了 OpenSSL,这样 Apache 就可以正确编译 ssl 模块了。然后我在 apache 过程中又遇到了另一个错误make install
:
libtool: install: error: relink `libaprutil-1.la' with the above command before installing it
为了解决这个问题,APR 类在编译期间需要一个特殊的配置选项:
CC="gcc -m64" ./configure --prefix=/usr/local/apr
CC="gcc -m64" ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
单独编译这些意味着我需要在 Apache 构建中使用 --with-apr 选项而不是 --with-included-apr:
./configure ... --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
我在 Apache 配置期间也使用了一个奇怪的配置选项:
--with-apxs2=...
应该是:
--with-apxs=...
理清所有这些问题并重新编译 apache 后,我再次尝试使用 tomcat 连接器构建。然后正确生成了 mod_jk.so 文件。
答案2
系统信息
# uname -r
2.6.32-358.14.1.el6.x86_64
# cat /etc/redhat-release
CentOS release 6.4 (Final)
# rpm -qa | grep httpd
httpd-devel-2.2.15-28.el6.centos.x86_64
httpd-2.2.15-28.el6.centos.x86_64
httpd-tools-2.2.15-28.el6.centos.x86_64
我会建议自己从源代码构建模块
# cd /root/
# wget http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.37-src.tar.gz
# tar -xzf tomcat-connectors-1.2.37-src.tar.gz
# cd tomcat-connectors-1.2.37-src/native/
# ./configure --prefix=/opt/ --with-apxs=/usr/sbin/apxs
# make
# file apache-2.0/mod_jk.so
apache-2.0/mod_jk.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
# cp apache-2.0/mod_jk.so /usr/lib64/httpd/modules/
# echo "LoadModule jk_module modules/mod_jk.so" > /etc/httpd/conf.d/mod_jk.conf
# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
# apachectl -t -D DUMP_MODULES | grep jk
Syntax OK
jk_module (shared)
因此无需从源代码安装 apache/openssl/apr/apr-util。如果你想升级软件包 - 那将是地狱