2008-11-19 32 views
7

Tôi đang biên soạn thư viện cho một dự án riêng tư, phụ thuộc vào một số thư viện. Cụ thể một trong những phụ thuộc được biên dịch với Fortran. Trên một số trường hợp, tôi đã nhìn thấy sự phụ thuộc được biên dịch với g77, trên những trường hợp khác, tôi đã thấy nó được biên dịch với gfortran. Dự án của tôi sau đó là ./configure 'd để liên kết với -lg2c hoặc -lgfortran, nhưng cho đến nay tôi đã thực hiện nó bằng tay.Cách tìm trình biên dịch nào được sử dụng: g77 hoặc gfortran

Nếu có thể, làm thế nào tôi có thể tìm hiểu, từ nhìn vào thư viện phụ thuộc (ví dụ như thông qua nm hoặc một số tiện ích khác?), Cho dù trình biên dịch sử dụng là g77 (và sau đó tôi sẽ sử dụng -lg2c trong các tùy chọn liên kết của tôi) hoặc gfortran (và sau đó tôi sẽ sử dụng -lgfortran)?

Cảm ơn trước!

Trả lời

6
nm filename | fgrep ' __g77' 

sẽ cho kết quả nếu G77 đã được sử dụng, trong khi đó

nm filename | fgrep '@@GFORTRAN' 

sẽ cho kết quả nếu gfortran được sử dụng.

1

Bạn có thể tìm ra bằng cách sử dụng nm và xem liệu mã được biên dịch có sử dụng các hàm từ một hay cái kia, nhưng đó là một hack. Bạn có thể tìm ra nó dựa trên thư viện nào có sẵn (nếu không có libg2c, ví dụ, nó không phải là g77), nhưng sau đó bạn vẫn có một số sự mơ hồ nếu cả hai đều có sẵn. Nếu bạn có thể tự xây dựng sự phụ thuộc, thì bạn có thể sử dụng một phần của quá trình xây dựng của bạn cho một phần khác bằng cách nào đó (biến, tệp, v.v.) mà bạn đã sử dụng.

3

Bạn cần phải grep cho thứ gì đó, ở đầu ra của nm filename, cho biết liệu g77 hoặc gfortran đã được sử dụng hay chưa. Trong hầu hết các trường hợp, nếu thư viện có ít nhất đầu vào-đầu ra ở một nơi, nó sẽ gọi libg2c hoặc libgfortran và bạn sẽ thấy một biểu tượng với g77 trong đó, hoặc gfortran. Vì vậy, cách tốt nhất là sử dụng grep:

nm filename | grep _g77_ 
nm filename | grep _gfortran_ 

Hai lưu ý:

  1. grepping cho @@GFORTRAN như geocar đề xuất là không đáng tin cậy: nó sẽ chỉ làm việc trên nền tảng nơi thư viện phiên bản được hỗ trợ, trong đó bao gồm ví dụ linux nhưng không phải Windows hoặc Mac OS.
  2. Vẫn có thể một số lệnh mã được biên dịch hoàn toàn không có chức năng thư viện hỗ trợ (nếu tất cả nó là số học đơn giản và không có đầu vào-đầu ra, ví dụ). Trong trường hợp đó, trừ khi nó được biên dịch với các tùy chọn gỡ rối, không thể nói trình biên dịch nào xuất nó ra.
Các vấn đề liên quan