Đây là lệnh icheck có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình mô phỏng trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS
CHƯƠNG TRÌNH:
TÊN
icheck - Trình kiểm tra ABI/API giao diện C
SYNOPSIS
tôi kiểm tra --canonify [[- đường cơ sở FILE] ...] [LỰA CHỌN] [GCC_OPTIONS] [-] các tập tin
tôi kiểm tra --đối chiếu [LỰA CHỌN] tập tin cũ tập tin mới
MÔ TẢ
Một công cụ để kiểm tra tĩnh các giao diện C để biết các thay đổi về API và ABI. Tất cả các thay đổi về loại
cần phát hiện các khai báo có thể gây ra thay đổi ABI, cùng với hầu hết các thay đổi API.
icheck được thiết kế để sử dụng với các thư viện như một phương pháp ngăn chặn sự trôi dạt ABI.
HÀNG
Giảm tập hợp các tệp nguồn thành tệp giao diện chuẩn bằng --canonify, sau đó so sánh
hai tệp giao diện như vậy với --compare. Nếu có sự thay đổi giao diện giữa chúng,
icheck sẽ mô tả những thay đổi và thất bại.
--canonify [[- đường cơ sở FILE] ...] [LỰA CHỌN] [GCC_OPTIONS] [-] các tập tin
Canon hóa các tệp mã nguồn (thường là các tiêu đề .h) để sau này so sánh với
--đối chiếu. Thường được sử dụng với -o tùy chọn để lưu bản tóm tắt vào một tập tin.
--đối chiếu [LỰA CHỌN] tập tin cũ tập tin mới
Đọc hai tệp giao diện chuẩn được tạo bằng --canonify và so sánh các
cấu trúc của mã nguồn với những thay đổi trong Giao diện công cộng của ứng dụng
(giao diện nhà phát triển hoặc API) và Giao diện nhị phân ứng dụng (ABI) được sử dụng để
liên kết với các chương trình hoặc thư viện khác.
LỰA CHỌN
TÔI KIỂM TRA LỰA CHỌN
-o, - đầu ra FILE
Phát đầu ra thành FILE, thay vì thiết bị xuất chuẩn.
--gỡ lỗi N
Kết xuất thông tin gỡ lỗi.
--chỉ một ĐIỀU
Chỉ xử lý THING đã cho.
--bỏ qua từ FILE
Bỏ qua những thứ không cần thiết FILE.
--skip-from-re regexp
Bỏ qua những thứ không cần thiết khỏi các tệp khớp với biểu thức chính quy.
--chỉ từ FILE
Chỉ lấy đồ từ FILE.
--chỉ-từ-re regexp
Chỉ lấy nội dung từ các tệp khớp với biểu thức chính quy.
GCC_OPTIONS
GCC_OPTIONS được chuyển tới gcc -E
CỨU GIÚP LỰA CHỌN
--Cứu giúp
Hiển thị tóm tắt trợ giúp cho tôi kiểm tra.
VÍ DỤ
Tất cả các tệp nguồn đều được xử lý trước bằng gcc, vì vậy canonify cần có thông tin bao gồm giống nhau
làm mã nguồn - hãy làm theo cú pháp từ Makefile để bao gồm các tùy chọn -I để cpp (Hoặc
gcc) để có thể định vị được tất cả các tiêu đề cần thiết. tôi kiểm tra sẽ hủy bỏ nếu có yêu cầu
không thể tìm thấy tiêu đề. Nguồn phải có thể biên dịch được; icheck không thể xử lý các tập tin
không thể được biên dịch trực tiếp. Nếu tiêu đề thiếu câu lệnh #include hoặc nếu không thì
yêu cầu phải được sử dụng theo cách đặc biệt thì không thể xử lý trực tiếp bằng icheck.
Thay vào đó, hãy viết một tệp C sơ khai để thiết lập mọi thứ một cách thích hợp và sau đó #includes
tiêu đề.
tôi kiểm tra --canonify -o ~/icheck/phiên bản cũ -I/usr/include/foo-2.0 /usr/src/bar/src/foobar.h
Chuẩn bị bản tóm tắt văn bản của tệp foobar.h và tất cả các tệp trong đó. Tóm tắt là
viết ra để ~/icheck/phiên bản cũ. Lặp lại cho /usr/src/bar1/src/foobar.h - cùng một tập tin
trong thư mục nguồn mới hơn, xuất ra một tệp mới, ví dụ: ~/icheck/phiên bản mới.
tôi kiểm tra --đối chiếu -o ~/icheck/results.txt ~/icheck/phiên bản cũ ~/icheck/phiên bản mới
Viết báo cáo so sánh giữa hai tập tin tóm tắt. Báo cáo chỉ ra tất cả các
những thay đổi trong ABI và/hoặc API được tìm thấy trong quá trình so sánh.
tôi kiểm tra --canonify -o debian/icheck.canonical -Idebian/foo-dev/usr/include debian/foo-
dev/usr/include/foobar.h
tôi kiểm tra --đối chiếu debian/icheck.manifest debian/icheck.canonical
Hai tuyên bố này, bao gồm trong một debian / quy tắc tập tin, sẽ khiến việc xây dựng gói bị
thất bại nếu API hoặc ABI thay đổi theo cách không mong muốn, trong đó icheck.manifest là bản sao của
giao diện dự kiến, được bao gồm trong gói.
Lưu ý rằng các đối số --compare bản thân chúng là các tệp C hợp lệ được xử lý trước,
vì vậy icheck.manifest có thể chứa logic tiền xử lý C. Điều này có thể hữu ích khi một gói
xuất các giao diện khác nhau tùy thuộc vào kiến trúc máy chủ. Trong trường hợp này, bạn không thể
thay thế nó bằng một bản sao mới của icheck.canonical khi giao diện thay đổi và bạn cần
cập nhật bảng kê khai. Thay vì cập nhật toàn bộ bảng kê khai bằng tay, hãy đặt tay
mô tả giao diện bằng văn bản trong một tập tin (icheck.static-manifest) và sau đó sử dụng:
tôi kiểm tra --canonify - đường cơ sở debian/icheck.static-manifest -o debian/icheck.dynamic-
biểu hiện
Cuối cùng, tạo icheck.manifest chứa:
#include "icheck.static-manifest"
#include "icheck.dynamic-manifest"
Điều này cho phép bạn cập nhật một số phần của bảng kê khai bằng tay trong khi vẫn tự động
tạo ra phần còn lại.
OUTPUT
icheck tạo mô tả dài về mọi thay đổi API hoặc ABI có thể xảy ra, dựa trên loại
thông tin. Nó không điều tra mã chương trình thực tế và do đó có thể
một số thay đổi về loại mà nó phát hiện không phải là thay đổi ABI hoặc API thực tế. Tuy nhiên, điều này thường
chỉ xảy ra khi mã chương trình được viết rõ ràng cho nó. Nếu nghi ngờ, hãy cho rằng đó là
đã thay đổi
Cuối cùng, icheck cung cấp bản tóm tắt các thay đổi. Lưu ý rằng hướng dẫn ở đây là
phụ thuộc vào thứ tự của các đối số --compare: giao diện cũ hơn phải đến trước,
hoặc hướng dẫn sẽ ngược lại. Ý nghĩa của các thuật ngữ khác nhau như
sau:
ABI ABI tương thích nếu mọi thứ được biên dịch dựa trên một phiên bản của
giao diện sẽ hoạt động khi chạy bằng phiên bản khác.
API API tương thích nếu mọi thứ được biên dịch dựa trên một phiên bản của
giao diện có thể được biên dịch dựa trên giao diện khác.
tương thích về phía trước
Một giao diện tương thích về phía trước nếu mọi thứ được biên dịch dựa trên giao diện cũ
phiên bản sẽ hoạt động với phiên bản mới. Đây là đặc điểm quan trọng đối với tên
thay đổi.
sự tương thích ngược
Một giao diện tương thích ngược nếu mọi thứ được biên dịch dựa trên giao diện mới
phiên bản sẽ hoạt động với phiên bản cũ. Đây là đặc điểm quan trọng đối với lắc lư
phiên bản những thay đổi. Nếu bạn không xây dựng các gói Debian, có thể bạn không
quan tâm đến những thay đổi không tương thích ngược.
Sử dụng icheck trực tuyến bằng dịch vụ onworks.net