64 비트 시스템에서 32 비트 Apache DSO (Oracle HTTP Server)를 컴파일 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/693733

문제

Oracle Database 및 Oracle HTTP 서버 설치를 32 비트 시스템에서 64 비트 시스템으로 마이그레이션했습니다. Oracle 데이터베이스는 64 비트이지만 (APACHE) HTTP 서버는 32 비트입니다.

나는 비 Oracle DSO (하나의 mod_ntlm)를 사용하지만 표준 "설치"유형을 실행할 때마다 64 비트 모듈로 끝납니다.

64 비트 시스템에서 32 비트 Apache 모듈을 컴파일하는 표준 방법이 있습니까?

도움이 되었습니까?

해결책

Andrew Medico의 답변에 대한 대안으로 사용하십시오. '-m32'32 비트 편집 및'-m64'PPC 또는 SPARC 또는 Intel Machines의 64 비트 컴파일 용. 실제로 사용중인 칩 아키텍처를 언급하지 않으며 해당 표기법은이 모든 것에 대해 작동합니다.

나는 종종 사용한다 :

CC="gcc -m32" ./configure

32 비트 컴파일을 보장하기 위해 (또는 더 자주, CC="gcc -m64" 64 비트 컴파일을 보장하기 위해).


질문 : "CC는 Make가 사용하는 환경 변수입니까?"

답 : 예,이 경우에도 인식됩니다. configure, 이것은 생성 된 쉘 스크립트입니다 autoconf. 내가 사용한 표기법 - 명령 줄에서 사용하는 것 - 환경에서 CC를 설정하는 동안 configure 명령이 실행됩니다. 다른 대답은 다음을 사용하는 것을 제안합니다.

./configure CC="gcc -m32"

나는 그것이 효과가 있고 거의 같은 효과를 얻는다 고 가정한다. 나는 그것을 시도하지 않았으므로 그것이 작동한다는 것을 모른다.

당신이 달리면 ./configure --help | less, 스크립트 사용 방법에 대한 정보 (종종 표준 정보)가 표시됩니다. 그리고 결국, 그것은 CC가 하나 인 관련 환경 변수 (일부) 관련 환경 변수를 나열합니다.

C 컴파일러를 "GCC -M32"로 설정하는 장점은 컴파일러를 사용할 때마다 32 비트 플래그가 설정되어 있다는 것입니다. 잘못 될 공간은 거의 없습니다. 플래그 변수 (CFLAGS 등)를 설정하면 일부 명령이 사용하지 않을 가능성이 있으며 상황이 잘못 될 수 있습니다.

또한 질문으로 돌아가서 make CC라는 변수 (매크로)를 확실히 사용합니다. Make Command Line에서 설정할 수 있습니다.

make CC="gcc -m32"

그것은 makefile의 모든 설정을 무시합니다. 대조적으로, 환경 변수를 사용하면 MakeFile의 설정은 환경의 값을 무시하므로 CC를 환경 변수로 설정하는 것은 도움이되지 않습니다. 하지만 make -e makefile보다 환경 우선 순위를 부여하면 일반적으로 사용하는 데 위험한 옵션입니다. 예상치 못한 부작용을 가질 수 있습니다.

다른 팁

./configure CFLAGS="-march=i686" 

해야합니다

GCC의 -M32 플래그와 함께 32 비트 객체 파일을 32 비트 라이브러리와 64 비트 라이브러리가있는 경우 32 비트 오브젝트 파일을 32 비트 객체 파일에 올바르게 연결하려면 LD 용 -MELF_I386 플래그를 포함해야 할 수도 있습니다. 64 비트 Linux 상자의 표준 LD가 64 비트 라이브러리로 기본값을 받고 연결이 발생하면 호환성 오류가 발생합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top