2011-04-28 35 views
18

Tùy chọn -l cho trình liên kết tìm kiếm các thư viện trong thư mục chuẩn. Và với -L, chúng tôi có thể chỉ định thư mục riêng của thư viện để tìm kiếm.Thứ tự của các tùy chọn -l và -L trong liên kết GNU có quan trọng không?

Câu hỏi: Trình tự của đơn đặt hàng có quan trọng đối với tùy chọn -L quá không, giống như nó có liên quan đến -l w.r.t?

Liên kết này: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html không nói nhiều về chuỗi -L.

EDIT Ngoài ra,

Thư mục chỉ định trên dòng lệnh được tìm kiếm trước khi mặc định thư mục

là từ trang người đàn ông (như được chỉ bởi Dmitry), thực hiện điều này có nghĩa là ngay cả khi tôi chỉ định thứ tự như:

gcc -lm hello.c -Lx 

vẫn là thư mục được chỉ định với -L sẽ được ưu tiên trước?

+0

'vẫn thư viện chỉ định với -L' ...: -L không _not_ chỉ định một thư viện (nó xác định thư mục tìm kiếm) – sehe

+0

@sehe cảm ơn, đó là một lỗi đánh máy (bây giờ tôi đã chỉnh sửa), tôi chưa nhận được câu trả lời cho câu hỏi thứ hai của mình. –

+0

có thể trùng lặp của [Tại sao thứ tự của tùy chọn '-l' trong gcc là gì?] (Http://stackoverflow.com/questions/11893996/why-does-the-order-of-l-option-in-gcc -một số) – patrickvacek

Trả lời

14

Có, thứ tự của -L các tùy chọn quan trọng - giống như các tùy chọn -l-I.

Từ man ld

-Lsearchdir
--library-path = searchdir

Thêm đường searchdir vào danh sách các đường dẫn ld sẽ tìm kiếm thư viện lưu trữ và các kịch bản kiểm soát ld . Bạn có thể sử dụng tùy chọn này bất kỳ số lần nào. Các thư mục được tìm kiếm theo thứ tự mà chúng được chỉ định trên dòng lệnh. Các thư mục được chỉ định trên dòng lệnh được tìm kiếm trước các thư mục mặc định. Tất cả các tùy chọn -L áp dụng cho tất cả các tùy chọn -l, bất kể thứ tự các tùy chọn xuất hiện.

GCC documentations và đặc biệt hơn Linking Options sẽ hữu ích cho bạn

Sửa
Xin lỗi, thực sự tôi đã bỏ lỡ để kiểm tra các liên kết mà bạn đã đưa ra. "man ld" chỉ có thể được viết trong bảng điều khiển.

Edit2
tôi đã thực hiện một thử nghiệm đơn giản đặt -l trước -L lựa chọn và nó cho thấy có sự khác biệt so với -L trước -l

Vì vậy, trả lời câu hỏi thứ hai của bạn, điều này

gcc -lm hello.c -Lx 

bằng này

gcc -Lx -lm hello.c 

libm được tìm kiếm đầu tiên trong thư mục x/trong cả hai bài kiểm tra.

Lưu ý rằng mặc dù đặt -l<lib> trước khi tệp nguồn là thực tiễn không tốt, có thể dẫn đến các tham chiếu không xác định khi liên kết. Đây là cách đúng

gcc hello.c -Lx -lm 
+0

Cảm ơn, phải được ghi lại ở đâu đó, tôi không thể tìm thấy nó, nếu bạn có một liên kết xác nhận điều đó, tôi sẽ biết ơn. –

+1

@Anisha Chắc chắn, hãy xem bản cập nhật của tôi –

+0

Biết ơn bạn: hattip: Tôi đã tìm kiếm Google trước khi yêu cầu ở đây, với từ khóa 'man ld' và liên kết thứ hai tôi nhận được là: http://linux.die.net/man/ 8/ld-linux, tôi thích trang _die.net_ wrt hơn, nhưng lần này tôi nhầm 'ld-linux' với 'ld'. Cảm ơn bạn đã chỉ ra. –

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