昔のリソースを割と最新のOSで動かそうとするとコケる。という実例。
前提条件
- x86_64なCentOS 5.2
- yumで入れれるApache(というよりApache2.2)はResin的に無理なのでソースでApache 2.0.xを入れる
- 普通にビルドすると jni_vfs.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object とか言うてきやがる
- JDKは一応Sun Microsystemが出してる奴(JDKが腐ってるのかと思ってIBM製とか手を出してみたりしたけど余計に無理だった(includeの中身が足りないとか)
- ていうか、Makefileが腐ってた
- 以下の作業はresinを展開した場所で行なうことになってます。
./configure
特に最初のCFLAGSが重要。
[root@localhost resin]# CFLAGS="-fPIC" ./configure --with-apxs=/usr/local/apache2/bin/apxs --with-openssl=/usr --with-jni-include=/usr/local/java/jdk/include --enable-shared --with-jni-include=/usr/local/java/jdk/include --with-java-home=/usr/local/java/jdk
resinのmakefileがいろいろと腐ってるので修正
[root@localhost resin]# vi src/c/plugin/resin/Makefile
で
INCLUDES = -I/usr/include $(JNI_INCLUDE) -I../common
てなってるのを
INCLUDES = -I/usr/include -I$(JNI_INCLUDE) -I$(JNI_INCLUDE)/linux -I../common
に修正。
あとは普通にmakeしてmake installすればOKでした。