FreeBSD 시스템에서 (gcc 대신) clang을 사용하여 openssl을 빌드하는 방법은 무엇입니까?

FreeBSD 시스템에서 (gcc 대신) clang을 사용하여 openssl을 빌드하는 방법은 무엇입니까?

저는 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원하는 두 개의 변수 및 빈 문자열을 설정하지만 그래도 작동하지 않습니다(다음 항목 참조).CCclangset CC=clang
  • 단순히 셸에서 변수를 설정하면 csh실제로 사용하려는 다른 항목에는 영향을 주지 않습니다 setenv CC clang(이 변수는 사용되지 않습니다 =). configsh스크립트이므로 이를 보려면 변수를 내보내야 합니다.
  • 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

관련 정보