2.4.7을 처음부터 컴파일하여 Apache 2.2.3을 2.4.7로 업그레이드하려고 시도한 후. 다음과 같은 오류가 발생합니다.
[root@test httpd-2.4.7]# /etc/init.d/httpd start
Starting httpd: httpd: Syntax error on line 149 of /etc/httpd/conf/httpd.conf: Cannot load /etc/httpd/modules/mod_auth_basic.so into server: /etc/httpd/modules/mod_auth_basic.so: undefined symbol: ap_expr_str_exec
[FAILED]
그런데 파일이 있는데,
/etc/httpd/modules/mod_auth_basic.so: ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), not stripped
2.2.3의 원래 conf는 /etc/httpd에 있었고 컴파일하기 위해 실행한 명령은 다음과 같습니다.
cd apr-1.5.0/
./configure --prefix=/usr/local/apr-httpd/
make
make install
cd ../apr-util-1.5.3/
./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/
make
make install
cd ../pcre-8.32/
./configure --prefix=/usr/local/pcre-8.32
make
make install
cd ../httpd-2.4.7/
./configure --with-apr=/usr/local/apr-httpd/ --with-apr-util=/usr/local/apr-util-httpd/ --with-pcre=/usr/local/pcre-8.32/ --prefix=/etc/httpd
make
make install
어떤 아이디어가 있나요?
답변1
ap_expr_str_exec
API 함수입니다.새로 도입된Apache httpd 2.4 코어에서. 오류는 mod_auth_basic.so 모듈이 ap_expr_str_exec
기호를 확인해야 하지만 찾을 수 없다고 불평하는 런타임 링커입니다.
readelf 명령의 출력을 통해 이를 확인할 수 있습니다.
$ readelf -s modules/mod_auth_basic.so
Num: Value Size Type Bind Vis Ndx Name
...
3: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND ap_expr_str_exec
...
기호 인덱스의 UND 값은 정의되지 않았으므로 런타임 시 해결되어야 함을 의미합니다.
따라서 모듈이 2.4 기호를 참조하지만 실행 중인 실행 파일에는 해당 기호가 없으므로 httpd 2.4 모듈을 httpd 2.2 인스턴스에 로드하려는 것처럼 보입니다. 올바른 httpd 바이너리를 실행하고 있는지 확인하세요.