2010-12-28 48 views
11

sự khác nhau giữa liên kết với gcc_s và gcc bằng phương tiện của LDFLAGS là gì? Gcc_s là thư viện tĩnh và thư viện được chia sẻ gcc phải không?sự khác biệt giữa -lgcc_s và gcc

Vì tôi đang tìm kiếm giải pháp mà nó được đề cập để liên kết với gcc trong khi chỉ gcc_s hoạt động trong trường hợp của tôi. Tôi muốn biết sự khác biệt thực sự.

< < ẩn biểu tượng '__name_here' trong /some/library/path.a(_filename.o) được tham chiếu bởi DSO

Trong trường hợp này, vấn đề này thường được giải quyết bằng cách thêm một trong hai "gcc -l "hoặc" gcc -print-libgcc-file-name "vào cờ liên kết (LDFLAGS). Tuy nhiên, không giống như các nền tảng thông thường khác của tôi (i386, amd64, sparc64) ở đây nó không đủ. Sau rất nhiều đầu đập (để công bằng, nó cũng xuất phát từ âm nhạc) Tôi nhận thấy rằng lá cờ này là cần thiết cả khi liên kết libc tệp thi hành cuối cùng. liên kết: http://people.defora.org/~khorben/200903.html

+0

Cũng có 'libgcc_eh.a', được sử dụng khi' -static' được sử dụng. http://stackoverflow.com/questions/10763394/how-to-build-ac-program-using-a-custom-version-of-glibc-and-static-linking –

Trả lời

12

libgcc_s.so là thư viện được chia sẻ, libgcc.a là thư viện tĩnh. Chúng không tương đương; có thể cần phải liên kết cả hai. libgcc_s chứa các biến toàn cầu mà không phải có nhiều bản sao trong một quá trình; mã trong libgcc an toàn để liên kết nhiều lần.

+0

Xin chào, Cảm ơn, << nó có thể là cần thiết để liên kết cả hai. Khi điều này cần thiết sẽ phát sinh? – kumar

+3

@kumar: Một số ký hiệu (ví dụ: '__register_frame') chỉ có trong libgcc_s, một số khác (ví dụ:' __eprintf') chỉ có trong libgcc. Sử dụng 'nm -D --defined-only libgcc_s.so' resp. 'nm --defined-only libgcc.a' để lấy danh sách đầy đủ để so sánh. –

+1

Tại sao chúng ta cần cả hai? Tại sao chúng không giống nhau, chỉ có một tĩnh và động khác? –

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