Tôi đã có một dự án làm việc trên đó là sử dụng FreeImage và openCV, hiện tại chúng tôi đang sử dụng hỗ trợ jpeg từ cả hai (tôi đang làm việc hướng tới việc sửa lỗi đó, nhưng bây giờ nó phải ở lại). Nhưng dù sao, FreeImage biên dịch libjpeg 7.0 thành các thư viện tĩnh của nó, và thư viện highgui của openCV liên kết nó như một thư viện chia sẻ (trên hệ thống của tôi, Ubuntu 9, tôi đã cài đặt libjpeg 6.2).Xung đột biểu tượng thư viện tĩnh và chia sẻ?
Chúng liên kết thành thư viện cuối cùng được sử dụng để liên kết với các chương trình khác nhau, trình bao bọc java, v.v. Tất cả đều hoạt động tốt, không có xung đột biểu tượng hoặc bất kỳ điều gì trong thời gian biên dịch/liên kết. Tuy nhiên, khi tôi mở một hình ảnh bằng cách sử dụng hàm cvLoadImage của openCV, nó sẽ chết khi đọc tiêu đề, rất có thể do sự khác biệt giữa các tiêu đề trong 6.2 và 7.0.
Nếu tôi hủy liên kết FreeImage (và nhận xét mã yêu cầu), cuộc gọi openCV bắt đầu hoạt động trở lại, vì vậy rõ ràng các ký hiệu libjpeg tĩnh từ FreeImage đang xung đột với các biểu tượng sẽ được tải từ thư viện được chia sẻ libjpeg. Những gì tôi không thể tìm ra là lý do tại sao trình biên dịch của tôi không phải là ném một lỗi trong quá trình liên kết vì hai bộ biểu tượng libjpeg. Ngoài ra, tôi đã thử thay thế tiêu đề jpeglib.h của hệ thống của tôi bằng phiên bản 7.0 tạm thời để xem openCV có được đồng bộ hóa với các ký hiệu tự do mang đến bảng hay không.
Cuối cùng tôi đặt printf vào jpeg_read_header trong libjpeg để biên dịch tự do, và xây dựng lại nó để xem openCV có sử dụng định nghĩa libjpeg tự do hay không. Nó không in ra nên tôi phải giả định là không.
Vì vậy, tôi đoán câu hỏi của tôi là
1) Tại sao không liên kết một libjpeg tĩnh và libjpeg chia sẻ tạo ra lỗi liên kết do lặp lại biểu tượng?
2) Có ai biết tại sao hai điều này xung đột với nhau không?
Chỉnh sửa: Biên dịch openCV ở chế độ gỡ lỗi và sau đó ở chế độ thông thường một lần nữa có vẻ đã đánh mất thứ gì đó và khiến nó hoạt động trở lại, không biết chuyện gì đang diễn ra.
Giả định của tôi là nó sử dụng một hoặc thư viện khác, nhưng có lẽ nó sử dụng một chút bằng cả hai cách nào đó? Thay đổi tiêu đề mà openCV biên dịch với không khắc phục được vấn đề sau khi tất cả .. –