Скомпилировать Apache 2.4.6 в Solaris 10 на машине SPARC (64 бита) ошибки

Я компилировал Httpd 2.4.6 в Solaris 10 на машине SPARC с прошлого понедельника. Я получаю несколько ошибок, которые не знаю, как исправить.

Я успешно скомпилировал Httpd 2.4.6 в Solaris 10 x86, согласно этой статье: Скомпилируйте Apache 2.4.2 в Solaris 10 на машине x86 (64 бита), ошибки

Я попробовал несколько флагов компилятора, которые не дали результата с разными ошибками. Вот шаги, как я делал сборку:

export PATH=/usr/sbin:/usr/bin:/usr/local/bin:/usr/xpg4/bin:/usr/sfw/bin:/usr/sfw/sbin:/usr/ccs/bin
#export LDFLAGS=" -L/usr/sfw/lib -R/usr/sfw/lib -L/usr/X/lib -R/usr/X/lib -L/usr/X11/lib -R/usr/X11/lib -L/usr/ccs/lib -R/usr/ccs/lib "
#export LDFLAGS="-L/usr/sfw/lib/sparcv9 -L/usr/lib/sparcv9 -L/usr/sfw/lib -R/usr/sfw/lib -L/usr/X/lib -R/usr/X/lib -L/usr/X11/lib -R/usr/X11/lib -L/usr/ccs/lib -R/usr/ccs/lib "
#export LDFLAGS="-L/usr/local/lib -R/usr/local/lib -R/usr/lib -L/usr/lib -R/usr/openwin/lib -L/usr/openwin/lib -L/usr/local/ssl/lib -R/usr/local/ssl/lib -L/usr/local/BerkeleyDB.4.2/lib -R/usr/local/BerkeleyDB.4.2/lib -L/usr/sfw/lib/sparcv9 -L/usr/lib/sparcv9 -L/usr/sfw/lib -R/usr/sfw/lib -L/usr/X/lib -R/usr/X/lib -L/usr/X11/lib -R/usr/X11/lib -L/usr/ccs/lib -R/usr/ccs/lib "
#export LD_LIBRARY_PATH=/usr/lib:/usr/sfw/lib
#export LD_LIBRARY_PATH_64=/usr/lib/64:/usr/sfw/lib/64
#Dont use CC, use GCC! This is VERY important. It wont work otherwise!!
export CC=gcc
#export CFLAGS="-m64 -O3"
export CFLAGS="-m64 -O2 -L/usr/local/lib -R/usr/local/lib -L/usr/local/ssl/lib -R/usr/local/ssl/lib -L/usr/openwin/lib -R/usr/openwin/lib -I/usr/local/rrdtool-1.2.19/include -I/usr/local/BerkeleyDB.4.7/include -I/usr/local/include/cairo"
export CPPFLAGS="-m64 -I/usr/local/include -I/usr/local/ssl/include -I/usr/local/include/ncurses -I/usr/openwin/include -I/usr/local/rrdtool-1.2.19/include -I/usr/local/BerkeleyDB.4.7/include -I/usr/local/include/lzo"
export LDFLAGS="-L/usr/local/lib -R/usr/local/lib -R/usr/lib -L/usr/lib -R/usr/openwin/lib -L/usr/openwin/lib -L/usr/local/ssl/lib -R/usr/local/ssl/lib -L/usr/X11R6/lib -R/usr/X11R6/lib -L/usr/local/BerkeleyDB.4.7/lib -R/usr/local/BerkeleyDB.4.7/lib"
#export CFLAGS=” -O2 -mcpu=v9 -m64″
#export CPP_FLAGS="-m64 -O3"
#export CPP_FLAGS="-m64 -O3 -I/usr/sfw/include -I/usr/local/include -I/usr/local/ssl/include -I/usr/local/include/ncurses -I/usr/local/BerkeleyDB.4.2/include -I/usr/openwin/include"
#export CPP_FLAGS="-I/usr/sfw/include"
#export CXX_FLAGS="-m64 -O3"

bzip2 -dc apr-1.4.8.tar.bz2 | tar xf -
bzip2 -dc apr-util-1.5.2.tar.bz2 | tar xf -
bzip2 -dc httpd-2.4.6.tar.bz2.tar.bz2.tar.bz2 | tar xf -
mv apr-util-1.5.2/ httpd-2.4.6/srclib/apr-util
mv apr-1.4.8/ httpd-2.4.6/srclib/apr


gzip -dc m4-1.4.17.tar.gz | tar xf -
cd m4-1.4.17
./configure --prefix=/opt/cmtools/m4-1.4.17
gmake
gmake install
gmake clean

gzip -dc autoconf-2.69.tar.gz | tar xf -
cd autoconf-2.69
./configure --prefix=/opt/cmtools/autoconf-2.69 M4=/opt/cmtools/m4-1.4.17/bin/m4
gmake
gmake install
gmake clean


gzip -dc automake-1.13.2.tar.gz | tar xf -
cd automake-1.13.2 
./configure --prefix=/opt/cmtools/automake-1.13.2 PATH=/opt/cmtools/autoconf-2.69/bin:$PATH
gmake
gmake install
gmake clean


bzip2 -dc pcre-8.33.tar.bz2 | tar xf -
cd pcre-8.33/
./configure --disable-cpp CFLAGS="-g -O3" CC="gcc -m64" --prefix=/usr/local/pcre 
gmake
gmake install
gmake clean


gzip -dc openssl-1.0.1e.tar.gz | tar xf -
cd openssl-1.0.1e
./config --prefix=/usr/local/ssl shared -m32
gmake
gmake install
gmake clean


bzip2 -dc binutils-2.23.2.tar.bz2.tar.bz2.tar.bz2 | tar xf -
cd binutils-2.23.2
./configure --prefix=/opt/cmtools/binutils-2.23.2
gmake
gmake install
gmake clean

cd httpd-2.4.6

./configure --prefix=/usr/local/apache2 \
--enable-mods-shared=all \
--enable-proxy \
--enable-proxy-connect \
--enable-proxy-ftp \
--enable-proxy-http \
--enable-ssl=shared \
--enable-ssl \
--with-ssl=/usr/local/ssl \
--with-mpm=prefork --with-pcre=/usr/local/pcre \
-with-included-apr 

gmake
gmake install
gmake clean

Основная ошибка, с которой я столкнулся при попытке использовать разные флаги компиляции:

ld: fatal: file /usr/local/lib/libpcre.so: wrong ELF class: ELFCLASS64
ld: fatal: File processing errors. No output written to .libs/httpd
collect2: ld returned 1 exit status
gmake[1]: *** [httpd] Error 1
gmake[1]: Leaving directory `/opt/cmtools/soft/httpd-2.4.6'
gmake: *** [all-recursive] Error 1

ld: fatal: file /usr/local/ssl/lib/libssl.so: wrong ELF class: ELFCLASS32
ld: fatal: file /usr/local/ssl/lib/libcrypto.so: wrong ELF class: ELFCLASS32
ld: fatal: File processing errors. No output written to .libs/ab
collect2: ld returned 1 exit status
gmake[2]: *** [ab] Error 1
gmake[2]: Leaving directory `/opt/cmtools/soft/httpd-2.4.6/support'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/opt/cmtools/soft/httpd-2.4.6/support'
gmake: *** [all-recursive] Error 1

Undefined                       first referenced
 symbol                             in file
TLSv1_2_client_method               ab.o
TLSv1_1_client_method               ab.o
BIO_set_callback                    ab.o
BIO_set_callback_arg                ab.o
BIO_get_callback_arg                ab.o
SSL_CTX_set_info_callback           ab.o
ld: fatal: Symbol referencing errors. No output written to .libs/ab
collect2: ld returned 1 exit status
gmake[2]: *** [ab] Error 1
gmake[2]: Leaving directory `/opt/cmtools/soft/httpd-2.4.6/support'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/opt/cmtools/soft/httpd-2.4.6/support'
gmake: *** [all-recursive] Error 1

Вот системная информация:

bash-3.00# uname -a
SunOS hegel 5.10 Generic_142909-17 sun4v sparc SUNW,SPARC-Enterprise-T5120
bash-3.00# cat /etc/release 
                   Oracle Solaris 10 9/10 s10s_u9wos_14a SPARC
     Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
                            Assembled 11 August 2010
bash-3.00# isainfo -b
64

Признательны за любую ветку за это. Спасибо.


person user2958812    schedule 11.11.2013    source источник


Ответы (1)


Вы строите PCRE как 64-битную библиотеку («-m64»), но пытаетесь собрать OpenSSL как 32-битную библиотеку («-m32») и компоновку с этим PCRE. Это не сработает.

Попробуйте собрать OpenSSL как 64-битный.

Вы можете обнаружить, что вам нужно отредактировать файл OpenSSL «Configure», чтобы настроить флаги компилятора, используемые для вашего оборудования и комбинации компилятора. Например, при сборке на Solaris x86 с использованием компилятора Sun Studio сценарий Configure включает флаг компилятора «-fast». Я на собственном горьком опыте выяснил, что это причиняет вам боль, когда вы строите коробку с процессором AMD, но планируете использовать код на коробках с процессорами Intel: флаг «-fast» включает все применимые оптимизации для вашего компилируемого модуля, включая вещи как AMD 3DNow! расширения. Лучше отредактировать файл Configure перед его запуском и заменить «-fast» на оптимизацию архитектуры, которая в этом случае подходит для ваших систем Intel с наименьшим общим знаменателем. OpenSSL использует необычный сценарий Configure, который игнорирует обычные переменные среды, такие как CFLAGS, поэтому иногда необходимо редактировать Configure.

Кроме того, не поддавайтесь соблазну выполнить параллельную сборку ("gmake -j n") с OpenSSL. Makefile, созданный с помощью OpenSSL Configure, не является безопасным для параллелизма и не будет компилироваться.

person macwhiz    schedule 05.03.2014