![FreeBSD 시스템에서 (gcc 대신) clang을 사용하여 openssl을 빌드하는 방법은 무엇입니까?](https://linux55.com/image/70842/FreeBSD%20%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%97%90%EC%84%9C%20(gcc%20%EB%8C%80%EC%8B%A0)%20clang%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20openssl%EC%9D%84%20%EB%B9%8C%EB%93%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
저는 64비트 FreeBSD 빌드 머신을 가지고 있습니다. Python3 애플리케이션 코드에 https 지원을 추가해야 합니다. 이를 위해 openssl 지원으로 Python을 빌드/컴파일하는 것이 좋습니다. 최종 실행 파일에는 gcc 종속성이 필요하지 않습니다.
그래서 나는 clang을 사용하여 Python을 빌드합니다. 하지만 그 전에는 openssl을 빌드할 때 이 작업을 수행할 수 없었습니다.
나는 심지어 "set CC clang"을 사용했습니다. 그러나 openssl은 여전히 gcc를 c 컴파일러로 사용합니다. 따라서 최종 동적 실행 파일에서 "ldd"를 실행하면 libc 종속성이 표시됩니다.
링크에는 FreeBSD 및 clang에 대한 내용이 없습니다. (https://wiki.openssl.org/index.php/Compilation_and_Installation)
몇 가지 대안을 제안해 주시겠습니까?
\bin\sh
[편집] 이것은 쉘에서 실행하는 명령입니다
set CC clang
./config -fPIC
출력에서 gcc가 사용되고 있음을 나타내는 다음 줄을 발견했습니다.
BN_ASM =x86_64-gcc.o
답변1
아래에 요약된 것처럼 많은 문제를 겪고 있는 것 같습니다. 너거의 확실한기본 FreeBSD OpenSSL을 사용하는 @mjturner가 지적한 Python 포트를 사용해야 합니다.
csh
구문 에서set CC clang
원하는 두 개의 변수 및 빈 문자열을 설정하지만 그래도 작동하지 않습니다(다음 항목 참조).CC
clang
set CC=clang
- 단순히 셸에서 변수를 설정하면
csh
실제로 사용하려는 다른 항목에는 영향을 주지 않습니다setenv CC clang
(이 변수는 사용되지 않습니다=
).config
은sh
스크립트이므로 이를 보려면 변수를 내보내야 합니다. libc
예아니요종속성gcc
, 동적으로 연결된 거의 모든 것이 libc에 연결됩니다(FreeBSD에서는 GNU glibc가 아닙니다). 또 다른 방법은 연결하는 것입니다.정적으로가능하다면 필수 코드를 최종 바이너리에 삽입하여 동적 종속성을 제거하세요. (일부 플랫폼과 사용 시 예외 처리에 대한 종속성이gcc
있을 수 있습니다 . 피하기 어렵습니다.) Python을 정적으로 연결하는 데 문제가 있을 것으로 예상합니다.libgcc
바이너리 배포(관련 라이센스 계약을 주의 깊게 읽었다고 가정)와 같은 특정 목적을 위해 clang을 사용하여 OpenSSL 및 Python을 빌드하거나 특정 소프트웨어 버전에 대한 요구 사항이 있는 경우 올바르게 설정할 수 있다는 CC
것을 알았습니다.OpenSSL 포트이를 수행하는 대신 스크립트 gcc
에서 명령을 패치 Configure
하고 FREEBSDCC
환경 변수를 사용하도록 선택합니다.
다른 제안:
- clang 사용에 대한 자세한 내용은 OpenSSL 위키를 참조하세요.https://wiki.openssl.org/index.php/Compilation_and_Installation#Modifying_Build_Settings
clang
예실제로는 다루었지만 FreeBSD는 아닙니다. 왜냐하면 모든 BSD가 동등한 것으로 간주되기 때문입니다. - OpenSSL을 빌드한 후 반드시
make test
실행하세요. - 모든 것이 동일한 컴파일러로 컴파일되었는지 확인하십시오. 즉,
python
모든 것이lib-dynload