2011-10-19 3 views
14

-Wa, - noexecstack을 사용하여 OpenSSL을 빌드하려고하지만 config 명령 행에서이 플래그를 제공 할 수있는 곳을 찾을 수 없습니다. 나는 CFLAGS를 설정하려고 시도했지만, 그것을 무시하고 자신의 것을 사용하는 것 같습니다.OpenSSL 용 사용자 정의 컴파일러/링커 플래그는 어떻게 제공합니까?

이것은 OpenSSL 소스의 깨끗한 복사본을 만드는 자동화 된 빌드이므로 일회용 구성 스크립트 해킹은 실제로 옵션이 아닙니다.

OpenSSL의 빌드 프로세스에 사용자 정의 플래그를 전달하는 방법이 있습니까?

+0

설명서에 실제로 피해야 할 편집 내용이 나와 있습니다. https://wiki.openssl.org/index.php/Compilation_and_Installation#Modifying_Build_Settings에서 sed를 부분적으로 실행하는 방법에 대해 설명합니다. 귀하의 빌드. –

답변

12

config 스크립트는 CFLAGS을 무시하지만 CC은 무시합니다. 당신이 당신의 컴파일러를 지정하고 동시에 그것을 플래그를 제공 할 수 있도록 : config 자동 플랫폼을 감지하고 사전 컴파일러 설정 Configure를 실행하기 때문에, 또는

export CC="gcc -Wall -DHELLO_WORLD"; ./config 

, 당신은 당신의 플랫폼 구성에 컴파일러 플래그를 추가 할 수 있습니다 . 예를 들어, 내 Mac, 나는 내가 처음 config를 실행할 때이 줄을 참조하십시오 내가 Configure을 열 경우

Operating system: i386-apple-darwinDarwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 
Configuring for darwin-i386-cc 

그래서, 내가 darwin-i386-cc 검색하고 사전에 플래그를 추가 할 수 있습니다.

프리셋 구성을 사용하지 않는 경우 명령 줄에서 직접 플래그를 Configure으로 전달하면 사용하게됩니다.

3

파티에 늦을 수 있지만 다른 방법은 생성 된 메이크 파일을 자동으로 편집하는 것입니다.

perl -i~ -plwe 's!^(CFLAG=.*$)!$1 -DPURIFY!' Makefile 

아니 가장 우아한 해결책을하지만 나를 위해 작동 : 예를 들면, 내가 먼저, 일반 구성을 수행 플래그에 -DPURIFY를 추가 할 수 있습니다.

+0

플래그를 제거하거나 바꿀 수있는 유일한 방법 인 것 같습니다. –

20

나중에 파티에 올리 겠지만 올바른 방법이라고 생각됩니다. config 스크립트 도움말에서

:

$ ./config -h 
Usage: config [options] 
-d Add a debug- prefix to machine choice. 
-t Test mode, do not run the Configure perl script. 
-h This help. 

Any other text will be passed to the Configure perl script. 
See INSTALL for instructions. 

는 그래서 config 스크립트가 Configure 스크립트에 "예상치 못한"옵션을 전달합니다.

$ ./Configure --help 
Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimental-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags] 

그 긴 줄의 끝에 [:flags] 부분을 참조하십시오 : 음, Configure 스크립트가 그것에 대해 말을하는 것을 볼 수 있습니다?

# -<xxx> +<xxx> compiler options are passed through 

그것은 잘 알려진 표준을 따르지 않기 때문에 분명 아니지만 대답은 : 그냥 config 명령 행의 마지막에 옵션을 추가 파일 내부 의견도 있습니다.

당신이 질문을 게시 이후 오랜 시간이 경과함에 따라

, 나는 추가해야합니다 : 그것은 당신이 작업은 OpenSSL의 버전 작동하지 않을 수 있습니다

  • (광산은 OpenSSL 1입니다.0);
  • 이전 답안 중 아무 것도 내 문제를 해결하지 못했기 때문에이 답변을 게시해야한다는 느낌이 들었습니다. 해결책을 찾기까지 조금 시간이 걸렸습니다.
+1

이것은 유용하지 않습니다. 대부분의 경우에 _set_ cflags가 필요할 것입니다. 이것은 단지 그들을 추가합니다. 이미있는 나쁜 것들을 제거하는 데 도움이되지 않습니다. –

관련 문제