Tôi có hai "plugins" (nghĩ về chúng giống như hai ứng dụng khác nhau trong gói phần mềm vì mục đích thảo luận) hai phiên bản riêng của thư viện của tôi. Mã của tôi được viết bằng C++ và sử dụng các không gian tên nhất quán trong suốt. Đôi khi tôi phải xây dựng hai phiên bản khác nhau cho từng ứng dụng. Điều này dường như gây ra một số vấn đề khi cả hai ứng dụng (plugins) trong gói được nạp đồng thời. Trước tiên, tôi cần trợ giúp để hiểu tại sao lỗi này xảy ra.Hai plugin liên kết với tên gọi DLL hoặc đối tượng thư viện chia sẻ (như vậy) với cách triển khai khác nhau (mã)
Ví dụ, tôi có hai thư viện riêng biệt nhưng được đặt tên giống nhau, nói mylib.so
(hoặc DLL) và mỗi ứng dụng liên kết đến (duy nhất) một trong số này. Nếu mã cơ bản trong mylib.so
giống nhau (tức là, không gian tên, tên hàm, v.v ... với các cách triển khai hơi khác nhau), điều này có gây ra sự cố không? Không phải là thực tế là hai bản sao của các thư viện được đặt ở vị trí duy nhất đủ để tránh bất kỳ vấn đề có thể phát sinh do sự mơ hồ hoặc các lỗi liên kết khác? Tôi nghĩ rõ ràng là không .. nhưng tôi muốn nghe từ một chuyên gia về điều này.
Giả sử mô tả ở trên là nguyên nhân gây ra sự cố, sẽ chỉ thay đổi tên của thư viện để bao gồm thông tin phiên bản, ví dụ: mylib_v1.so
và mylib_v2.so
cung cấp biện pháp bảo vệ chống lại lỗi mơ hồ (tên hàm/tên không gian giống nhau) ? Tôi vẫn không nghĩ .. nhưng tôi không chắc chắn lần này. Giả sử tôi đúng, sẽ thay đổi không gian tên bằng cách sử dụng một số macro trong mã của tôi để bao gồm thông tin phiên bản trong không gian tên (ví dụ: namespace mystuff {}
đã thay đổi thành namespace mystuff_v1
) làm mẹo ít nhất? Đánh giá cao thông tin chi tiết của bạn.
LƯU Ý: Đáng ngạc nhiên sự mơ hồ chỉ xảy ra trên Windows! Linux có thể xử lý tình huống trong đoạn thứ hai mà không gặp bất kỳ vấn đề gì.