hppa-linux-gnu-gcj-5 - Trực tuyến trên đám mây

Đây là lệnh hppa-linux-gnu-gcj-5 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 giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

CHƯƠNG TRÌNH:

TÊN


gcj - Trình biên dịch trước thời hạn cho ngôn ngữ Java

SYNOPSIS


gcj [-Idir...] [-d dir...]
[--LỚP ĐƯỜNG DẪN=con đường] [--classpath=con đường]
[-ftùy chọn...] [- mã hóa=tên]
[--chủ chốt=tên lớp] [-Dtên[=giá trị] ...]
[-C] [--nguồn tên tài nguyên] [-d thư mục]
[-Wcảnh báo...]
tệp nguồn...

MÔ TẢ


As gcj chỉ là một giao diện người dùng khác gcc, nó hỗ trợ nhiều tùy chọn tương tự như gcc.
Sách hướng dẫn này chỉ ghi lại các tùy chọn cụ thể cho gcj.

LỰA CHỌN


Đầu vào đầu ra các tập tin
A gcj lệnh giống như một gcc lệnh, trong đó nó bao gồm một số tùy chọn và tệp
những cái tên. Các loại tên tệp đầu vào sau được hỗ trợ:

hồ sơ.Java
Các tệp nguồn Java.

hồ sơ.lớp học
Tệp Java bytecode.

hồ sơ.zip
hồ sơ.jar
Một kho lưu trữ chứa một hoặc nhiều tệp ".class", tất cả đều được biên dịch. Các
kho lưu trữ có thể được nén. Các tệp trong kho lưu trữ không kết thúc bằng .lớp học đang
được coi như các tệp tài nguyên; chúng được biên dịch thành tệp đối tượng kết quả là cốt lõi:
Các URL.

@hồ sơ
Tệp chứa danh sách tên tệp đầu vào được phân tách bằng khoảng trắng. (Hiện tại, những
tất cả đều phải là tệp nguồn ".java", nhưng điều đó có thể thay đổi.) Mỗi ​​tệp được đặt tên được biên dịch,
giống như thể nó đã ở trên dòng lệnh.

thư viện.a
thư viện.vì thế
-ltên thư viện
Các thư viện để sử dụng khi liên kết. Xem gcc hướng dẫn sử dụng.

Bạn có thể chỉ định nhiều hơn một tệp đầu vào trên gcj dòng lệnh, trong trường hợp đó họ sẽ
tất cả đều được biên dịch. Nếu bạn chỉ định một "-o FILENAME " tùy chọn, tất cả các tệp đầu vào sẽ là
được biên dịch cùng nhau, tạo ra một tệp đầu ra duy nhất, có tên TÊN TỆP. Điều này được cho phép ngay cả
khi sử dụng "-S" hoặc "-c", nhưng không phải khi sử dụng "-C" hoặc "--resource". (Đây là một phần mở rộng
vượt ra ngoài những gì đồng bằng gcc cho phép.) (Nếu nhiều hơn một tệp đầu vào được chỉ định, tất cả phải
hiện là tệp ".java", mặc dù chúng tôi hy vọng sẽ sửa lỗi này.)

Đầu vào Các lựa chọn
gcj có các tùy chọn để kiểm soát nơi nó trông để tìm các tệp mà nó cần. Ví dụ, gcj Might
cần tải một lớp được tham chiếu bởi tệp mà nó đã được yêu cầu biên dịch. Như
các trình biên dịch khác cho ngôn ngữ Java, gcj có một khái niệm về một tốt nghiệp lớp XNUMX con đường. Có
một số tùy chọn và biến môi trường có thể được sử dụng để thao tác đường dẫn lớp.
Thời Gian gcj tìm kiếm một lớp nhất định, nó tìm kiếm đường dẫn lớp để tìm kiếm sự phù hợp .lớp học
or .Java tập tin. gcj đi kèm với một đường dẫn lớp được cài đặt sẵn trỏ đến
libgcj.jar, một tệp chứa tất cả các lớp tiêu chuẩn.

Trong văn bản dưới đây, một thành phần thư mục hoặc đường dẫn có thể tham chiếu đến một thư mục thực tế
trên hệ thống tệp hoặc vào một .zip or .jar tập tin, mà gcj sẽ tìm kiếm như thể nó là một
thư mục.

-Idir
Tất cả các thư mục được chỉ định bởi "-I" được giữ theo thứ tự và được thêm vào đường dẫn lớp
được xây dựng từ tất cả các tùy chọn khác. Trừ khi tương thích với các công cụ như "javac"
rất quan trọng, chúng tôi khuyên bạn nên luôn sử dụng "I" thay vì các tùy chọn khác cho
thao tác trên đường dẫn lớp.

--classpath =con đường
Điều này đặt đường dẫn lớp thành con đường, danh sách các đường dẫn được phân tách bằng dấu hai chấm (dựa trên Windows
hệ thống, danh sách các đường dẫn được phân tách bằng dấu chấm phẩy). Điều này không ghi đè nội trang
("khởi động") đường dẫn tìm kiếm.

--CLASSPATH =con đường
Từ đồng nghĩa không được dùng nữa cho "--classpath".

--bootclasspath =con đường
Nơi để tìm các lớp nội trang chuẩn, chẳng hạn như "java.lang.String".

--extdirs =con đường
Đối với mỗi thư mục trong con đường, đặt nội dung của thư mục đó ở cuối
con đường lớp học.

LỚP HỌC
Đây là một biến môi trường chứa danh sách các đường dẫn.

Đường dẫn lớp cuối cùng được xây dựng như vậy:

* Đầu tiên hãy đến tất cả các thư mục được chỉ định thông qua "-I".

* Nếu như --classpath được chỉ định, giá trị của nó được nối thêm. Ngược lại, nếu "CLASSPATH"
biến môi trường được chỉ định, sau đó giá trị của nó được thêm vào. Nếu không, hiện tại
thư mục (".") được thêm vào.

* Nếu "--bootclasspath" được chỉ định, hãy thêm giá trị của nó. Nếu không, hãy nối phần tích hợp sẵn
thư mục hệ thống, libgcj.jar.

* Cuối cùng, nếu "--extdirs" được chỉ định, hãy nối thêm nội dung của phần đã chỉ định
thư mục ở cuối đường dẫn lớp. Nếu không, hãy nối nội dung của
các extdirs tích hợp sẵn tại "$ (prefix) / share / java / ext".

Tệp lớp được xây dựng bởi gcj cho lớp "java.lang.Object" (và được đặt trong "libgcj.jar")
chứa thuộc tính độ dài XNUMX đặc biệt "gnu.gcj.gcj-biên dịch". Trình biên dịch tìm kiếm
thuộc tính này khi tải "java.lang.Object" và sẽ báo lỗi nếu không tìm thấy,
trừ khi nó biên dịch thành bytecode (tùy chọn "-fforce-class-archive-check" có thể được sử dụng để
ghi đè hành vi này trong trường hợp cụ thể này.)

-fforce-class-archive-check
Điều này buộc trình biên dịch luôn kiểm tra thuộc tính độ dài XNUMX đặc biệt
"gnu.gcj.gcj-biên dịch" trong "java.lang.Object" và gặp lỗi nếu không tìm thấy.

-fsource =PHIÊN BẢN
Tùy chọn này được sử dụng để chọn phiên bản nguồn được chấp nhận bởi gcj. Mặc định là 1.5.

Mã hóa
Ngôn ngữ lập trình Java sử dụng Unicode trong suốt. Với nỗ lực hòa nhập tốt
với các ngôn ngữ khác, gcj cho phép .Java các tệp được viết bằng hầu hết mọi kiểu mã hóa. gcj
biết cách chuyển đổi các bảng mã này thành bảng mã bên trong của nó tại thời điểm biên dịch.

Bạn có thể sử dụng "--encoding =TÊN" tùy chọn để chỉ định một mã hóa (của một ký tự cụ thể
set) để sử dụng cho các tệp nguồn. Nếu điều này không được chỉ định, mã hóa mặc định đến từ
ngôn ngữ hiện tại của bạn. Nếu hệ thống máy chủ của bạn không có đủ hỗ trợ ngôn ngữ, thì gcj
giả sử mã hóa mặc định là UTF-8 bảng mã của Unicode.

Để triển khai "--encoding", gcj chỉ cần sử dụng quy trình chuyển đổi "iconv" của nền tảng máy chủ lưu trữ.
Điều này có nghĩa là trong thực tế gcj bị giới hạn bởi khả năng của nền tảng máy chủ.

Các tên được phép cho đối số "--encoding" khác nhau giữa các nền tảng (vì chúng
không được tiêu chuẩn hóa ở bất cứ đâu). Tuy vậy, gcj triển khai mã hóa có tên UTF-8
nội bộ, vì vậy nếu bạn chọn sử dụng điều này cho các tệp nguồn của mình, bạn có thể yên tâm rằng nó
sẽ hoạt động trên mọi máy chủ.

Cảnh báo
gcj thực hiện một số cảnh báo. Như với các loại chung khác gcc cảnh báo, nếu một tùy chọn của
biểu mẫu "-Wfoo" bật cảnh báo, sau đó "-Wno-foo" sẽ tắt nó. Ở đây chúng tôi đã chọn
ghi lại hình thức cảnh báo sẽ có hiệu lực - mặc định là
đối lập với những gì được liệt kê.

-Wredundant-modifier
Với lá cờ này, gcj sẽ cảnh báo về các bổ ngữ dư thừa. Ví dụ, nó sẽ cảnh báo
nếu một phương thức giao diện được khai báo là "công khai".

- Dấu chấm phẩy-xen kẽ
Điều này gây ra gcj để cảnh báo về các câu lệnh trống. Các báo cáo trống đã được
không dùng nữa.

-Không lỗi thời
Tùy chọn này sẽ gây ra gcj không cảnh báo khi tệp nguồn mới hơn so với tệp phù hợp của nó
tệp lớp. Theo mặc định gcj sẽ cảnh báo về điều này.

-Không bị phản đối
Cảnh báo nếu một lớp, phương thức hoặc trường không dùng nữa được tham chiếu.

-Không sử dụng
Điều này cũng giống như gcccủa "-Wunused".

-Tường
Điều này cũng giống như "-Wredundant-modifiers -Wextraneous-dotolon -Wunused".

Liên kết
Để biến một ứng dụng Java thành một chương trình thực thi, bạn cần liên kết nó với
thư viện, giống như C hoặc C ++. Trình liên kết theo mặc định tìm kiếm một hàm toàn cầu có tên
"chủ chốt". Vì Java không có các hàm toàn cục và một tập hợp các lớp Java có thể
có nhiều hơn một lớp có phương thức "chính", bạn cần cho trình liên kết biết lớp nào trong số
những phương thức "chính" mà nó sẽ gọi khi khởi động ứng dụng. Bạn có thể làm điều đó trong
bất kỳ cách nào sau đây:

* Chỉ định lớp chứa phương thức "chính" mong muốn khi bạn liên kết ứng dụng,
bằng cách sử dụng cờ "--main", được mô tả bên dưới.

* Liên kết (các) gói Java vào một thư viện dùng chung (dll) thay vì một tệp thực thi. sau đó
gọi ứng dụng bằng chương trình "gij", đảm bảo rằng "gij" có thể tìm thấy
thư viện nó cần.

* Liên kết (các) gói Java với cờ "-lgij", liên kết trong quy trình "chính"
từ lệnh "gij". Điều này cho phép bạn chọn lớp có phương thức "chính" mà bạn
muốn chạy khi bạn chạy ứng dụng. Bạn cũng có thể sử dụng các cờ "gij" khác, chẳng hạn như
Các cờ "-D" để thiết lập các thuộc tính. Sử dụng thư viện "-lgij" (thay vì "gij"
chương trình của cơ chế trước) có một số ưu điểm: nó tương thích với tĩnh
liên kết và không yêu cầu cấu hình hoặc cài đặt thư viện.

Các tùy chọn "gij" này liên quan đến việc liên kết tệp thực thi:

--chính =TÊN LỚP
Tùy chọn này được sử dụng khi liên kết để chỉ định tên của lớp có phương thức "chính"
sẽ được gọi khi tệp thực thi kết quả được chạy.

-Dtên[=giá trị]
Tùy chọn này chỉ có thể được sử dụng với "--main". Nó xác định một thuộc tính hệ thống có tên tên
có giá trị giá trị. Nếu giá trị không được chỉ định thì nó mặc định là chuỗi trống.
Các thuộc tính hệ thống này được khởi tạo khi khởi động chương trình và có thể được truy xuất
trong thời gian chạy bằng phương thức "java.lang.System.getProperty".

-lgij
Tạo một ứng dụng có quá trình xử lý dòng lệnh của lệnh "gij".

Tùy chọn này là một thay thế cho việc sử dụng "--main"; bạn không thể sử dụng cả hai.

-static-libgcj
Tùy chọn này khiến liên kết được thực hiện dựa trên phiên bản tĩnh của thời gian chạy libgcj
thư viện. Tùy chọn này chỉ khả dụng nếu có hỗ trợ trình liên kết tương ứng.

Phạt cảnh cáo: Liên kết tĩnh của libgcj có thể khiến các phần thiết yếu của libgcj bị bỏ qua.
Một số phần của libgcj sử dụng phản chiếu để tải các lớp trong thời gian chạy. Vì trình liên kết làm
không nhìn thấy các tham chiếu này tại thời gian liên kết, nó có thể bỏ qua các lớp được tham chiếu. Các
kết quả thường là (nhưng không phải luôn luôn) một "ClassNotFoundException" được ném vào thời gian chạy.
Thận trọng khi sử dụng tùy chọn này. Để biết thêm chi tiết xem:
<http://gcc.gnu.org/wiki/Statically% 20 liên kết% 20libgcj>

Thế hệ
Ngoài nhiều gcc các tùy chọn kiểm soát việc tạo mã, gcj có một số lựa chọn
cụ thể cho chính nó.

-C Tùy chọn này được sử dụng để nói gcj để tạo bytecode (.lớp học tệp) thay vì đối tượng
Mã.

--nguồn tên tài nguyên
Tùy chọn này được sử dụng để nói gcj để biên dịch nội dung của một tệp nhất định sang mã đối tượng
vì vậy nó có thể được truy cập trong thời gian chạy bằng trình xử lý giao thức cốt lõi như cốt lõi:/nguồn-
tên. Lưu ý rằng tên tài nguyên là tên của tài nguyên được tìm thấy trong thời gian chạy; vì
ví dụ, nó có thể được sử dụng trong lệnh gọi tới "ResourceBundle.getBundle". Tệp thực tế
tên được biên dịch theo cách này phải được chỉ định riêng.

-ftarget =PHIÊN BẢN
Điều này có thể được sử dụng với -C để chọn phiên bản bytecode do gcj. Các
mặc định là 1.5. Khi không tạo bytecode, tùy chọn này không có hiệu lực.

-d thư mục
Khi được sử dụng với "-C", điều này gây ra tất cả .lớp học các tập tin được đưa vào
thư mục con thích hợp của thư mục. Theo mặc định, chúng sẽ được đặt trong các thư mục con
của thư mục làm việc hiện tại.

-fno-giới hạn-kiểm tra
Theo mặc định, gcj tạo mã kiểm tra giới hạn của tất cả lập chỉ mục mảng
các hoạt động. Với tùy chọn này, các kiểm tra này được bỏ qua, có thể cải thiện hiệu suất
cho mã sử dụng nhiều mảng. Lưu ý rằng điều này có thể dẫn đến
hành vi nếu mã được đề cập thực sự vi phạm các ràng buộc giới hạn mảng. Nó
an toàn để sử dụng tùy chọn này nếu bạn chắc chắn rằng mã của bạn sẽ không bao giờ có
"ArrayIndexOutOfBoundsException".

-fno-store-séc
Không tạo kiểm tra cửa hàng mảng. Khi lưu trữ các đối tượng vào mảng, kiểm tra thời gian chạy
thường được tạo để đảm bảo rằng đối tượng được gán tương thích với
kiểu thành phần của mảng (có thể không được biết tại thời điểm biên dịch). Với cái này
tùy chọn, các kiểm tra này bị bỏ qua. Điều này có thể cải thiện hiệu suất cho mã lưu trữ
các đối tượng thành mảng thường xuyên. Sẽ an toàn khi sử dụng tùy chọn này nếu bạn chắc chắn
mã sẽ không bao giờ ném một "ArrayStoreException".

-fjni
Với gcj Có hai tùy chọn để viết các phương thức gốc: CNI và JNI. Theo mặc định
gcj giả sử bạn đang sử dụng CNI. Nếu bạn đang biên dịch một lớp với các phương thức gốc, và
các phương pháp này được thực hiện bằng JNI, sau đó bạn phải sử dụng "-fjni". Tùy chọn này
nguyên nhân gcj để tạo các sơ khai sẽ gọi các phương thức JNI bên dưới.

-fno-khẳng định
Không nhận ra từ khóa "khẳng định". Điều này là để tương thích với các phiên bản cũ hơn
của đặc tả ngôn ngữ.

-fno-tối ưu hóa-tĩnh-lớp-khởi tạo
Khi mức tối ưu hóa lớn hơn hoặc bằng "-O2", gcj sẽ cố gắng tối ưu hóa
cách gọi vào thời gian chạy được thực hiện để khởi tạo các lớp tĩnh khi sử dụng lần đầu
(tối ưu hóa này không được thực hiện nếu "-C" được chỉ định.) Khi biên dịch sang gốc
mã, "-fno -mize-static-class-initialization" sẽ tắt tính năng tối ưu hóa này,
bất kể mức độ tối ưu hóa đang được sử dụng.

--disable-khẳng định [=lớp hoặc gói]
Không bao gồm mã để kiểm tra xác nhận trong mã đã biên dịch. Nếu như
"=lớp hoặc gói " thiếu vô hiệu hóa việc tạo mã xác nhận cho tất cả các lớp,
trừ khi được ghi đè bởi cờ "--enable-khẳng định" cụ thể hơn. Nếu như lớp hoặc gói
là một tên lớp, chỉ vô hiệu hóa việc tạo kiểm tra xác nhận trong lớp được đặt tên hoặc
các lớp bên trong của nó. Nếu như lớp hoặc gói là một tên gói, vô hiệu hóa việc tạo
xác nhận kiểm tra trong gói được đặt tên hoặc một gói con.

Theo mặc định, xác nhận được bật khi tạo tệp lớp hoặc khi không tối ưu hóa,
và bị vô hiệu hóa khi tạo mã nhị phân được tối ưu hóa.

--enable-khẳng định [=lớp hoặc gói]
Tạo mã để kiểm tra xác nhận. Tùy chọn có thể bị đặt tên sai, vì bạn vẫn cần
để bật tính năng kiểm tra xác nhận tại thời điểm chạy và chúng tôi không hỗ trợ bất kỳ cách dễ dàng nào để thực hiện
điều đó. Vì vậy, cờ này vẫn chưa thực sự hữu ích, ngoại trừ việc ghi đè một phần
"--khóa-xác nhận".

-findirect-send
gcj có khả năng tương thích nhị phân đặc biệt ABI, được kích hoạt bởi
Tùy chọn "-findirect-send". Trong chế độ này, mã được tạo bởi gcj tôn vinh
đảm bảo khả năng tương thích nhị phân trong Đặc tả ngôn ngữ Java, và kết quả là
các tệp đối tượng không cần phải được liên kết trực tiếp với các phụ thuộc của chúng. Thay thế,
tất cả các phụ thuộc được tra cứu trong thời gian chạy. Điều này cho phép trộn miễn phí các
mã đã biên dịch.

Lưu ý rằng, hiện tại, "-findirect-dict" chỉ có thể được sử dụng khi biên dịch .lớp học
các tập tin. Nó sẽ không hoạt động khi biên dịch từ nguồn. CNI cũng chưa làm việc với
khả năng tương thích nhị phân ABI. Những hạn chế này sẽ được dỡ bỏ trong một số tương lai
phát hành.

Tuy nhiên, nếu bạn biên dịch mã CNI với ABI tiêu chuẩn, bạn có thể gọi nó từ mã
được xây dựng với khả năng tương thích nhị phân ABI.

-fbootstrap-lớp học
Tùy chọn này có thể được sử dụng để nói với "libgcj" rằng các lớp đã biên dịch nên được tải bởi
trình tải bootstrap, không phải trình tải lớp hệ thống. Theo mặc định, nếu bạn biên dịch một lớp
và liên kết nó vào một tệp thực thi, nó sẽ được coi như thể nó đã được tải bằng cách sử dụng
bộ tải lớp hệ thống. Điều này thật tiện lợi, vì nó có nghĩa là những thứ như
"Class.forName ()" sẽ tìm kiếm LỚP HỌC để tìm lớp mong muốn.

-sản xuất-phản xạ
Tùy chọn này khiến mã được tạo bởi gcj để chứa một số lượng giảm của lớp
siêu dữ liệu được sử dụng để hỗ trợ phản ánh thời gian chạy. Chi phí của khoản tiết kiệm này là sự mất mát của
khả năng sử dụng các khả năng phản chiếu nhất định của thời gian chạy Java tiêu chuẩn
môi trường. Khi đặt tất cả siêu dữ liệu ngoại trừ dữ liệu cần thiết để có được chính xác
ngữ nghĩa thời gian chạy bị loại bỏ.

Đối với mã không sử dụng phản xạ (tức là tuần tự hóa, RMI, CORBA hoặc các phương thức gọi
trong gói "java.lang.reflect"), "-frednced-Reflect" sẽ dẫn đến
hoạt động tiết kiệm kích thước mã thực thi.

JNI ("-fjni") và khả năng tương thích nhị phân ABI ("-findirect-cert") không hoạt động
đúng cách mà không cần siêu dữ liệu phản ánh đầy đủ. Bởi vì điều này, nó là một lỗi khi sử dụng
các tùy chọn này với "-frednced-Reflection".

Phạt cảnh cáo: Nếu không có siêu dữ liệu phản ánh, mã sử dụng "Trình quản lý bảo mật" có thể
Không hoạt động bình thường. Ngoài ra, việc gọi "Class.forName ()" có thể không thành công nếu phương thức gọi có
không có siêu dữ liệu phản ánh.

Định cấu hình thời gian Các lựa chọn
Một số gcj các tùy chọn thế hệ mã ảnh hưởng đến ABI kết quả và vì vậy chỉ có thể
được đưa ra một cách có ý nghĩa khi "libgcj", gói thời gian chạy, được định cấu hình. "libgcj" đặt
các tùy chọn thích hợp từ nhóm này thành một suy nghi tệp được đọc bởi gcj. Các tùy chọn này
được liệt kê ở đây cho đầy đủ; nếu bạn đang sử dụng "libgcj" thì bạn sẽ không muốn chạm vào
các tùy chọn này.

-cầu chì-boehm-gc
Điều này cho phép sử dụng mã đánh dấu bitmap Boehm GC. Đặc biệt điều này gây ra
gcj để đặt một bộ mô tả đánh dấu đối tượng vào mỗi vtable.

-fhash-đồng bộ hóa
Theo mặc định, dữ liệu đồng bộ hóa (dữ liệu được sử dụng để "đồng bộ hóa", "chờ" và
"thông báo") được trỏ tới bởi một từ trong mỗi đối tượng. Với tùy chọn này gcj giả định rằng
thông tin này được lưu trữ trong bảng băm chứ không phải trong bản thân đối tượng.

-fuse-chia-chương trình con
Trên một số hệ thống, một quy trình thư viện được gọi để thực hiện phép chia số nguyên. Đây là
yêu cầu để xử lý ngoại lệ chính xác khi chia cho số không.

-fcheck-tham khảo
Trên một số hệ thống, cần phải chèn các kiểm tra nội tuyến bất cứ khi nào truy cập một đối tượng
thông qua một tài liệu tham khảo. Trên các hệ thống khác, bạn sẽ không cần điều này vì con trỏ null truy cập
được bộ xử lý bắt tự động.

-fuse-nguyên tử-nội trang
Trên một số hệ thống, GCC có thể tạo mã cho các hoạt động nguyên tử được tích hợp sẵn. Dùng cái này
tùy chọn để buộc gcj sử dụng các nội trang này khi biên dịch mã Java. Cái đó ở đâu
khả năng hiện có, nó sẽ được tự động phát hiện, vì vậy bạn thường sẽ không cần
để sử dụng tùy chọn này.

Sử dụng hppa-linux-gnu-gcj-5 trực tuyến bằng các dịch vụ onworks.net



Các chương trình trực tuyến Linux & Windows mới nhất