编译tomcat连接器时没有生成mod_jk.so

编译tomcat连接器时没有生成mod_jk.so

当我尝试从源代码编译 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。如果你想升级软件包 - 那将是地狱

相关内容