2010-11-15 54 views
8

tôi đã thường xuyên gặp phải những cảnh báo sau đây từ gdb:Cảnh báo này có nghĩa là gì?

warning: .dynamic section for XXX is not at the expected address

nơi XXX là tên của một số thư viện. Gần đây nhất tôi đã nhận nó cho libgobject-2.0.so. Ứng dụng của tôi sử dụng GTK. gdb đã được tung ra nó mà không có vấn đề cho đến ngày hôm qua khi tôi đồng bộ mã mới nhất từ ​​kho và xây dựng nó afresh. Kể từ đó nó đã được phàn nàn về phần .dynamic. Những lý do có thể cho nó là gì? Và làm cách nào để giải quyết chúng?

Trả lời

5

Một số phiên bản gdb thực sự hữu ích hơn một chút với cảnh báo đó. Họ đầu ra giống như sau:

cảnh báo: Phần .dynamic cho "libhello.so" không phải là tại địa chỉ dự kiến ​​(sai thư viện hoặc phiên bản không phù hợp?)

Hãy chắc chắn rằng GDB tìm thấy thư viện chương trình của bạn đã thực sự biên dịch và rằng bất kỳ biểu tượng gỡ lỗi nào, nếu trong các tệp riêng biệt, đối với ứng dụng và thư viện là hiện tại và nhất quán với các bản dựng bạn đang sử dụng.

Bản nâng cấp có vẻ giống như một nghi phạm tốt cho một nguyên nhân. Các thư viện chèn sẵn cũng có thể khiến cảnh báo này xuất hiện, mặc dù tôi nghĩ gdb có thể xử lý trường hợp đó.

+0

Một trường hợp điển hình cho ứng dụng này: T1) được bắt đầu và tiếp tục chạy với các tệp nhị phân cũ, T2). hoặc gcore đã được tạo). Bằng cách nhìn vào dấu thời gian nâng cấp (T2) và dấu thời gian của coredump (T3) - một trong những giả định là thích hợp (nâng cấp) lib đã được sử dụng. Giả định sai! Biết được điều này trước đã cứu được ngày của tôi ... Các ứng dụng của chúng tôi đang sử dụng tùy chỉnh khởi động LD_LIBRARY/etc env, vì vậy chúng tôi phải loại bỏ tất cả các tùy chọn khác trước khi đối mặt với điều hiển nhiên (IT guys đã quên khởi động lại ứng dụng sau khi nâng cấp) – Vlad

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