2011-01-07 40 views
12

Tôi biết -Wl,-shared là tùy chọn ld. Tôi đã nhìn thấy một số người biên dịch như thế này,Sự khác biệt giữa chia sẻ và -Wl, đã chia sẻ các tùy chọn GCC

$ gcc -shared -Wl,-soname,libtest.so -o libtest.so *.o 

Và một số người như thế này

$ gcc -Wl,-shared -Wl,-soname,libtest.so -o libtest.so *.o 

Vì vậy, tôi muốn biết nếu có một số khác biệt giữa -shared-Wl,-shared.

Cảm ơn.

Trả lời

11

chênh lệch giữa việc chuyển -shared thành gcc hoặc -shared thành ld (qua -Wl). Chuyển số -shared tới GCC có thể bật hoặc tắt các cờ khác tại thời điểm liên kết. Đặc biệt, các tệp crt* khác nhau có thể có liên quan.

Để biết thêm thông tin, grep cho -shared trong thư mục và thư mục con của gcc/config/ của GCC.

Edit: Để cung cấp cho một ví dụ cụ thể: trên i386 FreeBSD, gcc -shared sẽ liên kết trong đối tượng tập tin crtendS.o, trong khi không -shared, nó sẽ liên kết trong crtend.o để thay thế. Do đó, -shared-Wl,-shared không tương đương.

+1

Trong thân cây svn của gcc hiện tại, tôi đã tìm thấy các nhận xét sau tại dòng 85 trong gcc/config/i386/linux.h. Ở đây chúng tôi cung cấp hỗ trợ cho các tùy chọn GCC đặc biệt -static và -shared, cho phép chúng tôi liên kết mọi thứ theo một trong ba chế độ này bằng cách áp dụng các kết hợp tùy chọn thích hợp vào thời gian liên kết. " –

+0

Xin chào, FX, bạn có thể đưa ra một lời giải thích cụ thể hơn không? Cảm ơn. –

0

Tôi không nghĩ có bất kỳ sự khác biệt nào. -shared không phải là tùy chọn được hỗ trợ của gcc và nó được chuyển đến liên kết cho dù bạn chỉ định nó với -Wl hay không. -Wl tùy chọn gcc được sử dụng để chỉ định rằng một danh sách các tùy chọn được tách nhau bằng dấu phẩy sẽ được chuyển đến trình liên kết để xử lý tiếp.

+0

Có sự khác biệt. Trong trường hợp của tôi, dự án sẽ không biên dịch với -Wl. –

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