2011-10-19 28 views
14

Tôi đang cố gắng xây dựng OpenSSL với -Wa, - noexecstack, nhưng không thể tìm thấy bất kỳ vị trí nào trong dòng lệnh cấu hình của nó để cung cấp cờ này. Tôi đã cố gắng để thiết lập CFLAGS, nhưng nó dường như bỏ qua điều đó và chỉ sử dụng riêng của nó.Làm cách nào để có thể cung cấp các cờ biên dịch/liên kết tùy chỉnh cho OpenSSL?

Đây là một bản dựng tự động làm việc với bản sao sạch của nguồn OpenSSL, do đó, một lần hack của tập lệnh cấu hình không thực sự là một tùy chọn.

Có cách nào để chuyển cờ tùy chỉnh cho quá trình tạo OpenSSL không?

+0

Lưu ý rằng tài liệu thực sự gợi ý rằng bạn thực hiện các chỉnh sửa mà bạn muốn tránh - xem https://wiki.openssl.org/index.php/Compilation_and_Installation#Modifying_Build_Settings, nơi họ nói về chạy sed như một phần của bản dựng của bạn. –

Trả lời

12

Tập lệnh config bỏ qua CFLAGS, nhưng không phải CC. Vì vậy, bạn có thể chỉ định trình biên dịch của bạn và cung cấp cho nó những lá cờ cùng một lúc:

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

Ngoài ra, kể từ khi config tự động phát hiện nền tảng của bạn và sau đó chạy Configure với các thiết lập trình biên dịch sẵn, bạn có thể thêm những lá cờ biên dịch để cấu hình nền tảng của bạn . Ví dụ, cho mac của tôi, tôi thấy dòng này khi tôi lần đầu tiên chạy config:

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 

Vì vậy, nếu tôi mở Configure, tôi có thể tìm kiếm darwin-i386-cc và thêm những lá cờ để các cài đặt trước.

Nếu bạn không sử dụng cấu hình đặt trước, bạn chỉ cần chuyển cờ trực tiếp đến Configure trên dòng lệnh và nó sẽ sử dụng chúng.

3

Kết thúc buổi tiệc, nhưng cách khác để thực hiện việc này là thực hiện chỉnh sửa tự động cho tệp makefile được tạo. Ví dụ: để thêm -DPURIFY đến cờ, đầu tiên tôi làm là cấu hình bình thường, sau đó:

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

Không phải là giải pháp thanh lịch nhất, nhưng nó làm việc cho tôi.

+0

Đây có vẻ là cách duy nhất để xóa hoặc thay thế cờ. –

20

Sau bữa tiệc, nhưng điều này có vẻ là cách thực hiện chính xác điều này.

Từ config kịch bản giúp đỡ:

$ ./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. 

Vì vậy, kịch bản config chuyển tiếp tùy chọn "bất ngờ" đến Configure kịch bản. Vâng, cho phép xem những gì kịch bản Configure có thể nói về điều đó:

$ ./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] 

Xem phần [:flags] ở phần cuối của dòng lâu? Ngoài ra còn có một bình luận bên trong file:

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

Nó không phải là rõ ràng vì nó không theo tiêu chuẩn nổi tiếng nhưng câu trả lời là: chỉ cần nối thêm các tùy chọn để kết thúc dòng config lệnh.

Như một thời gian dài đã trôi qua kể từ khi bạn đăng các câu hỏi, tôi phải thêm:

  • nó có thể không làm việc cho các phiên bản OpenSSL bạn đang làm việc với (tôi là OpenSSL 1.0);
  • Tôi cảm thấy bắt buộc phải đăng câu trả lời này vì không có câu trả lời nào trước đây giải quyết được vấn đề của tôi và tôi mất một lúc để tìm ra giải pháp đó.
+1

Hóa ra điều này không hữu ích. Hầu hết thời gian bạn cần phải _set_ cflags; điều này chỉ nối thêm chúng. Không giúp loại bỏ những cái xấu đã có. –

Các vấn đề liên quan