ar - hướng dẫn tham khảo, tùy chọn, ví dụ về lệnh


TÊN

ar - tạo, sửa đổi và trích xuất từ kho lưu trữ

TÓM TẮT

ar [-X32_64] [-]p[mod] [--plugin name] [--target bfdname] [--output dirname] [--record-libdeps libdeps] [--thin] [relpos] [count] archive [member...]

SỰ MIÊU TẢ

Chương trình GNU ar tạo, sửa đổi và trích xuất từ các kho lưu trữ. Kho lưu trữ là một tệp duy nhất chứa một tập hợp các tệp khác trong một cấu trúc cho phép truy xuất các tệp riêng lẻ ban đầu (được gọi là thành viên của kho lưu trữ).

Nội dung, chế độ (quyền), dấu thời gian, chủ sở hữu và nhóm của tệp gốc được lưu giữ trong kho lưu trữ và có thể được khôi phục khi giải nén.

GNU ar có thể duy trì các kho lưu trữ mà các thành viên có tên với độ dài bất kỳ; tuy nhiên, tùy thuộc vào cách ar được định cấu hình trên hệ thống của bạn, giới hạn về độ dài tên thành viên có thể được áp dụng để tương thích với các định dạng lưu trữ được duy trì bằng các công cụ khác. Nếu nó tồn tại, giới hạn thường là 15 ký tự (điển hình của các định dạng liên quan đến a.out) hoặc 16 ký tự (điển hình của các định dạng liên quan đến coff).

ar được coi là một tiện ích nhị phân vì các kho lưu trữ thuộc loại này thường được sử dụng làm thư viện chứa các chương trình con thường cần. Vì các thư viện thường phụ thuộc vào các thư viện khác nên ar cũng có thể ghi lại các phần phụ thuộc của thư viện khi tùy chọn --record-libdeps được chỉ định.

ar tạo chỉ mục cho các ký hiệu được xác định trong các mô-đun đối tượng có thể định vị lại trong kho lưu trữ khi bạn chỉ định công cụ sửa đổi s. Sau khi được tạo, chỉ mục này được cập nhật trong kho lưu trữ bất cứ khi nào ar thực hiện thay đổi đối với nội dung của nó (tiết kiệm cho thao tác cập nhật q). Kho lưu trữ có chỉ mục như vậy sẽ tăng tốc độ liên kết với thư viện và cho phép các quy trình trong thư viện gọi lẫn nhau mà không cần quan tâm đến vị trí của chúng trong kho lưu trữ.

Bạn có thể sử dụng nm -s hoặc nm --print-armap để liệt kê bảng chỉ mục này. Nếu kho lưu trữ thiếu bảng, thì có thể sử dụng một dạng ar khác gọi là ranlib để chỉ thêm bảng.

GNU ar có thể tùy chọn tạo một kho lưu trữ mỏng, chứa chỉ mục biểu tượng và các tham chiếu đến các bản sao gốc của các tệp thành viên của kho lưu trữ. Điều này hữu ích cho việc xây dựng các thư viện để sử dụng trong một cây xây dựng cục bộ, nơi các đối tượng có thể định vị lại dự kiến sẽ vẫn có sẵn và việc sao chép nội dung của từng đối tượng sẽ chỉ lãng phí thời gian và không gian.

Một kho lưu trữ có thể mỏng hoặc có thể bình thường. Nó không thể là cả hai cùng một lúc. Khi một kho lưu trữ được tạo, không thể thay đổi định dạng của nó mà không xóa nó trước rồi tạo một kho lưu trữ mới ở vị trí của nó.

Các kho lưu trữ mỏng cũng làm phẳng, do đó, việc thêm một kho lưu trữ mỏng vào một kho lưu trữ mỏng khác sẽ không lồng vào nhau, như sẽ xảy ra với một kho lưu trữ thông thường. Thay vào đó, các yếu tố của kho lưu trữ đầu tiên được thêm riêng lẻ vào kho lưu trữ thứ hai.

Các đường dẫn đến các phần tử của kho lưu trữ được lưu trữ tương ứng với chính kho lưu trữ đó.

GNU ar được thiết kế để tương thích với hai cơ sở khác nhau. Bạn có thể kiểm soát hoạt động của nó bằng các tùy chọn dòng lệnh, chẳng hạn như các loại ar khác nhau trên hệ thống Unix; hoặc, nếu bạn chỉ định tùy chọn dòng lệnh duy nhất -M, bạn có thể điều khiển tùy chọn đó bằng tập lệnh được cung cấp qua đầu vào tiêu chuẩn, chẳng hạn như chương trình thủ thư MRI.

TÙY CHỌN

GNU ar cho phép bạn kết hợp mã thao tác p và cờ bổ trợ mod theo thứ tự bất kỳ, trong đối số dòng lệnh đầu tiên.

Nếu muốn, bạn có thể bắt đầu đối số dòng lệnh đầu tiên bằng dấu gạch ngang.

Chữ cái khóa p chỉ định thao tác nào sẽ thực hiện; nó có thể là bất kỳ điều nào sau đây, nhưng bạn phải chỉ định một trong số chúng:

  1. Xóa các mô-đun khỏi kho lưu trữ. Chỉ định tên của các mô-đun sẽ bị xóa là thành viên...; kho lưu trữ không bị ảnh hưởng nếu bạn chỉ định không có tệp nào cần xóa. Nếu bạn chỉ định công cụ sửa đổi v, ar sẽ liệt kê từng mô-đun khi nó bị xóa.

  2. Sử dụng thao tác này để di chuyển thành viên trong kho lưu trữ. Thứ tự của các thành viên trong kho lưu trữ có thể tạo ra sự khác biệt trong cách các chương trình được liên kết bằng thư viện, nếu một ký hiệu được xác định trong nhiều thành viên. Nếu không có công cụ sửa đổi nào được sử dụng với m, bất kỳ thành viên nào bạn đặt tên trong các đối số thành viên sẽ được chuyển đến cuối của kho lưu trữ; thay vào đó, bạn có thể sử dụng công cụ sửa đổi a, b hoặc i để di chuyển chúng đến một vị trí cụ thể.

  3. In các thành viên được chỉ định của kho lưu trữ, sang tệp đầu ra tiêu chuẩn. Nếu công cụ sửa đổi v được chỉ định, hãy hiển thị tên thành viên trước khi sao chép nội dung của nó sang đầu ra tiêu chuẩn. Nếu bạn không chỉ định đối số thành viên, tất cả các tệp trong kho lưu trữ sẽ được in.

  4. Nối nhanh; Trước đây, hãy thêm các tệp thành viên... vào cuối kho lưu trữ mà không cần kiểm tra để thay thế. Các công cụ sửa đổi a, b và i không ảnh hưởng đến thao tác này; thành viên mới luôn được đặt ở cuối kho lưu trữ. Công cụ sửa đổi v làm cho ar liệt kê từng tệp khi nó được thêm vào. Vì điểm của thao tác này là tốc độ nên việc triển khai ar có tùy chọn không cập nhật bảng ký hiệu của kho lưu trữ nếu có. Tuy nhiên, có quá nhiều hệ thống khác nhau cho rằng các bảng biểu tượng luôn được cập nhật, vì vậy GNU ar sẽ xây dựng lại bảng ngay cả với một phần bổ sung nhanh. Lưu ý - GNU ar coi lệnh qs là từ đồng nghĩa với r - thay thế các tệp hiện có trong kho lưu trữ và thêm các tệp mới vào cuối.

  5. Chèn các tệp thành viên... vào kho lưu trữ (có thay thế). Thao tác này khác với q ở chỗ mọi thành viên hiện có trước đó sẽ bị xóa nếu tên của họ khớp với tên được thêm vào. Nếu một trong các tệp có tên trong thành viên... không tồn tại, ar sẽ hiển thị thông báo lỗi và không làm phiền bất kỳ thành viên hiện có nào của kho lưu trữ khớp với tên đó. Theo mặc định, các thành viên mới được thêm vào cuối tệp; nhưng bạn có thể sử dụng một trong các từ bổ nghĩa a, b hoặc i để yêu cầu vị trí liên quan đến một số thành viên hiện có. Công cụ sửa đổi v được sử dụng với thao tác này tạo ra một dòng đầu ra cho mỗi tệp được chèn, cùng với một trong các chữ cái a hoặc r để cho biết liệu tệp đã được thêm vào (không có thành viên cũ nào bị xóa) hay bị thay thế.

  6. Thêm một chỉ mục vào kho lưu trữ hoặc cập nhật nó nếu nó đã tồn tại. Lưu ý rằng lệnh này là một ngoại lệ đối với quy tắc chỉ có thể có một chữ cái lệnh, vì có thể sử dụng nó làm lệnh hoặc công cụ sửa đổi. Trong cả hai trường hợp, nó làm điều tương tự.

  7. Hiển thị bảng liệt kê nội dung của kho lưu trữ hoặc nội dung của các tệp được liệt kê trong thành viên... có trong kho lưu trữ. Thông thường, chỉ tên thành viên được hiển thị, nhưng nếu công cụ sửa đổi O được chỉ định, thì phần bù tương ứng của thành viên cũng được hiển thị. Cuối cùng, để xem các chế độ (quyền), dấu thời gian, chủ sở hữu, nhóm và kích thước, nên bao gồm công cụ sửa đổi v. Nếu bạn không chỉ định thành viên, tất cả các tệp trong kho lưu trữ sẽ được liệt kê. Nếu có nhiều tệp có cùng tên (giả sử fie) trong một kho lưu trữ (giả sử b.a), ar t b.a fie liệt kê chỉ là sơ thẩm; để xem tất cả, bạn phải yêu cầu danh sách đầy đủ---trong ví dụ của chúng tôi là ar t b.a.

  8. Trích xuất thành viên (có tên thành viên) từ kho lưu trữ. Bạn có thể sử dụng công cụ sửa đổi v với thao tác này để yêu cầu ar liệt kê từng tên khi nó trích xuất tên đó. Nếu bạn không chỉ định thành viên, tất cả các tệp trong kho lưu trữ sẽ được trích xuất. Không thể trích xuất tệp từ kho lưu trữ mỏng và có các hạn chế khi trích xuất từ kho lưu trữ được tạo bằng P: Đường dẫn không được tuyệt đối, không được chứa .. và bất kỳ thư mục con nào trong đường dẫn phải tồn tại. Nếu muốn tránh những hạn chế này thì hãy sử dụng tùy chọn --đầu ra để chỉ định thư mục đầu ra.

Một số công cụ sửa đổi (mod) có thể ngay sau chữ cái khóa p, để chỉ định các biến thể trong hành vi của một hoạt động:

  1. Thêm các tệp mới sau thành viên hiện có của kho lưu trữ. Nếu bạn sử dụng công cụ sửa đổi a, thì tên của thành viên lưu trữ hiện tại phải xuất hiện dưới dạng đối số relpos, trước đặc tả archive.

  2. Thêm các tệp mới trước thành viên hiện có của kho lưu trữ. Nếu bạn sử dụng công cụ sửa đổi b, thì tên của thành viên lưu trữ hiện có phải xuất hiện dưới dạng đối số relpos, trước đặc tả archive. (giống như i).

  3. Tạo kho lưu trữ. Kho lưu trữ được chỉ định luôn được tạo nếu nó không tồn tại khi bạn yêu cầu cập nhật. Nhưng một cảnh báo được đưa ra trừ khi bạn chỉ định trước rằng bạn muốn tạo nó bằng cách sử dụng công cụ sửa đổi này.

  1. Hoạt động ở chế độ xác định. Khi thêm tệp và chỉ mục lưu trữ, hãy sử dụng số 0 cho UID, GID, dấu thời gian và sử dụng các chế độ tệp nhất quán cho tất cả các tệp. Khi tùy chọn này được sử dụng, nếu ar được sử dụng với các tùy chọn giống hệt nhau và các tệp đầu vào giống nhau, thì nhiều lần chạy sẽ tạo ra các tệp đầu ra giống hệt nhau bất kể chủ sở hữu, nhóm, chế độ tệp hoặc thời gian sửa đổi của tệp đầu vào. Nếu binutils được định cấu hình bằng --kích hoạt-lưu trữ xác định, thì chế độ này được bật theo mặc định. Bạn có thể tắt tính năng này bằng công cụ sửa đổi U bên dưới.

  1. Cắt bớt tên trong kho lưu trữ. GNU ar thường sẽ cho phép tên tệp có độ dài bất kỳ. Điều này sẽ khiến nó tạo ra các tệp lưu trữ không tương thích với chương trình ar gốc trên một số hệ thống. Nếu đây là vấn đề đáng lo ngại, công cụ sửa đổi f có thể được sử dụng để cắt ngắn tên tệp khi đưa chúng vào kho lưu trữ.

  1. Chèn các tệp mới trước thành viên hiện có của kho lưu trữ. Nếu bạn sử dụng công cụ sửa đổi i, thì tên của thành viên lưu trữ hiện có phải xuất hiện dưới dạng đối số relpos, trước đặc tả archive. (giống như b).

  1. Chỉ định các phụ thuộc của thư viện này. Các phần phụ thuộc phải ngay lập tức tuân theo ký tự tùy chọn này, phải sử dụng cú pháp giống như dòng lệnh của trình liên kết và phải được chỉ định trong một đối số. Tức là, nếu cần nhiều mục, chúng phải được trích dẫn để tạo thành một đối số dòng lệnh. Ví dụ: L -L/usr/local/lib -lmydep1 -lmydep2

  1. Sử dụng tham số count. Điều này được sử dụng nếu có nhiều mục trong kho lưu trữ có cùng tên. Trích xuất hoặc xóa phiên bản số lượng của tên đã cho khỏi kho lưu trữ.

  1. Giữ nguyên ngày gốc của các thành viên khi trích xuất chúng. Nếu bạn không chỉ định công cụ sửa đổi này, các tệp được trích xuất từ kho lưu trữ sẽ được đóng dấu thời gian trích xuất.

  1. Hiển thị hiệu số thành viên bên trong kho lưu trữ. Sử dụng cùng với tùy chọn t.

  2. Sử dụng tên đường dẫn đầy đủ khi khớp hoặc lưu trữ tên trong kho lưu trữ. Các kho lưu trữ được tạo với tên đường dẫn đầy đủ không tuân thủ POSIX và do đó có thể không hoạt động với các công cụ khác với các công cụ GNU cập nhật. Sửa đổi các kho lưu trữ đó bằng GNU ar mà không sử dụng P sẽ xóa tên đường dẫn đầy đủ trừ khi kho lưu trữ là một kho lưu trữ mỏng. Lưu ý rằng P có thể hữu ích khi thêm tệp vào kho lưu trữ mỏng vì r không có P sẽ bỏ qua đường dẫn khi chọn phần tử cần thay thế. Do đó, ar rcST archive.a subdir/file1 subdir/file2 file1 sẽ dẫn đến việc subdir/file1 đầu tiên được thay thế bằng file1 từ thư mục hiện tại. Việc thêm P sẽ ngăn việc thay thế này.

  1. Viết chỉ mục tệp đối tượng vào kho lưu trữ hoặc cập nhật chỉ mục hiện có, ngay cả khi không có thay đổi nào khác được thực hiện đối với kho lưu trữ. Bạn có thể sử dụng cờ sửa đổi này với bất kỳ thao tác nào hoặc một mình. Chạy ar s trên một kho lưu trữ tương đương với chạy ranlib trên đó.

  1. Không tạo bảng ký hiệu lưu trữ. Điều này có thể tăng tốc độ xây dựng một thư viện lớn trong vài bước. Không thể sử dụng kho lưu trữ kết quả với trình liên kết. Để tạo bảng ký hiệu, bạn phải bỏ qua công cụ sửa đổi S trong lần thực hiện cuối cùng của ar hoặc bạn phải chạy ranlib trên kho lưu trữ .

  2. Bí danh không dùng nữa cho --thin. T không được khuyến nghị vì trong nhiều triển khai ar T có nghĩa khác, như được chỉ định bởi X/Giao diện hệ thống mở.

  1. Thông thường, ar r... chèn tất cả các tệp được liệt kê vào kho lưu trữ. Nếu bạn muốn chỉ chèn những tệp bạn liệt kê mới hơn các thành viên hiện có cùng tên, hãy sử dụng công cụ sửa đổi này. Công cụ sửa đổi u chỉ được phép cho thao tác r (thay thế). Cụ thể, tổ hợp qu không được phép vì việc kiểm tra dấu thời gian sẽ làm mất bất kỳ lợi thế về tốc độ nào từ thao tác q.

  1. Không không hoạt động ở chế độ xác định. Đây là nghịch đảo của công cụ sửa đổi D ở trên: các tệp đã thêm và chỉ mục lưu trữ sẽ nhận các giá trị chế độ tệp và UID, GID, dấu thời gian và tệp thực tế của chúng. Đây là giá trị mặc định trừ khi binutils được định cấu hình bằng --enable-deterministic-archives.

  1. Công cụ sửa đổi này yêu cầu phiên bản chi tiết của một thao tác. Nhiều thao tác hiển thị thông tin bổ sung, chẳng hạn như tên tệp được xử lý, khi công cụ sửa đổi v được thêm vào.

  1. Công cụ sửa đổi này hiển thị số phiên bản của ar.

Chương trình ar cũng hỗ trợ một số tùy chọn dòng lệnh không phải là công cụ sửa đổi hay hành động, nhưng thay đổi hành vi của chương trình theo những cách cụ thể:

--help

Hiển thị danh sách các tùy chọn dòng lệnh được hỗ trợ bởi ar rồi thoát.

--version

Hiển thị thông tin phiên bản của ar rồi thoát.

-X32_64

ar bỏ qua tùy chọn ban đầu được đánh vần là -X32_64 để tương thích với AIX. Hành vi do tùy chọn này tạo ra là mặc định cho GNU ar. ar không hỗ trợ bất kỳ tùy chọn -X nào khác; cụ thể là nó không hỗ trợ -X32 là giá trị mặc định cho AIX ar.

--plugin name

Công tắc dòng lệnh tùy chọn --plugin name khiến ar tải plugin có tên name bổ sung hỗ trợ cho nhiều định dạng tệp hơn, bao gồm các tệp đối tượng có thông tin tối ưu hóa thời gian liên kết. Tùy chọn này chỉ khả dụng nếu chuỗi công cụ đã được tạo với hỗ trợ plugin được bật. Nếu --plugin không được cung cấp, nhưng hỗ trợ plugin đã được bật thì ar sẽ lặp lại các tệp trong $ {libdir}/bfd-plugins theo thứ tự bảng chữ cái và plugin đầu tiên xác nhận quyền sở hữu đối tượng được đề cập sẽ được sử dụng. Xin lưu ý rằng thư mục tìm kiếm plugin này không phải là thư mục được tùy chọn -plugin của ld sử dụng. Để ar sử dụng plugin trình liên kết, plugin này phải được sao chép vào thư mục $ {libdir}/bfd-plugins. Đối với các phần tổng hợp dựa trên GCC, plugin trình liên kết được gọi là liblto_plugin.so.0.0.0. Đối với phần tổng hợp dựa trên Clang, nó được gọi là LLVMgold.so. Plugin GCC luôn tương thích ngược với các phiên bản cũ hơn, vì vậy chỉ cần sao chép phiên bản mới nhất là đủ.

--target target

Công tắc dòng lệnh tùy chọn --đích bfdname chỉ định rằng các thành viên lưu trữ ở định dạng mã đối tượng khác với định dạng mặc định của hệ thống. Nhìn thấy

--output dirname

Tùy chọn --đầu ra có thể được sử dụng để chỉ định đường dẫn đến thư mục mà các thành viên lưu trữ sẽ được trích xuất vào đó. Nếu tùy chọn này không được chỉ định thì thư mục hiện tại sẽ được sử dụng. Lưu ý - mặc dù sự hiện diện của tùy chọn này ngụ ý thao tác trích xuất x nhưng tùy chọn đó vẫn phải được đưa vào dòng lệnh.

--record-libdeps libdeps

Tùy chọn --record-libdeps giống hệt với công cụ sửa đổi l, chỉ được xử lý ở dạng dài.

--thin

Biến kho lưu trữ được chỉ định thành một kho lưu trữ mỏng. Nếu nó đã tồn tại và là một kho lưu trữ thông thường, thì các thành viên hiện có phải có trong cùng thư mục với archive.

  1. Đọc các tùy chọn dòng lệnh từ tệp. Các tùy chọn đọc được chèn vào vị trí của tùy chọn @tệp ban đầu. Nếu tệp không tồn tại hoặc không thể đọc được thì tùy chọn sẽ được xử lý theo nghĩa đen và không bị xóa. Các tùy chọn trong tệp được phân tách bằng khoảng trắng. Một ký tự khoảng trắng có thể được bao gồm trong một tùy chọn bằng cách bao quanh toàn bộ tùy chọn trong dấu ngoặc đơn hoặc dấu ngoặc kép. Bất kỳ ký tự nào (kể cả dấu gạch chéo ngược) đều có thể được bao gồm bằng cách thêm tiền tố vào ký tự được bao gồm bằng dấu gạch chéo ngược. Bản thân tệp có thể chứa các tùy chọn @tệp bổ sung; bất kỳ tùy chọn nào như vậy sẽ được xử lý đệ quy.

XEM THÊM

nm (1), ranlib (1), and the Info entries for binutils.

BẢN QUYỀN

Bản quyền (c) 1991-2023 Tổ chức Phần mềm Tự do, Inc.

Quyền được cấp để sao chép, phân phối và/hoặc sửa đổi tài liệu này theo các điều khoản của Giấy phép Tài liệu Tự do GNU, Phiên bản 1.3 hoặc bất kỳ phiên bản nào mới hơn do Tổ chức Phần mềm Tự do xuất bản; không có Phần Bất biến, không có Văn bản Bìa trước và không có Văn bản Bìa sau. Một bản sao của giấy phép được bao gồm trong phần có tiêu đề Giấy phép Tài liệu Miễn phí GNU.