Xin lỗi nếu đây là một câu hỏi rõ ràng, nhưng tôi đã tìm thấy một số ... Tài liệu tham khảo và cung cấp cho chúng tôi dưới dạng tệp nhị phân .so, được xây dựng trên Fedora 11. Chúng tôi đã thử nghiệm API trên một máy phát triển Fedora 11 mà không có vấn đề gì. Tuy nhiên, khi tôi cố gắng liên kết với API trên nền tảng mục tiêu của khách hàng, điều này xảy ra là SuSE Enterprise 10.2, tôi nhận được lỗi "Định dạng tệp không được nhận dạng".Khả năng tương thích nhị phân giữa các bản phân phối Linux
Lệnh cũng là một phần của gói binutils, chẳng hạn như objdump hoặc nm, cho tôi lỗi định dạng tệp tương tự. Các "tập tin" lệnh cho tôi:
ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), not stripped
và "ldd" lệnh show:
ldd: warning: you do not have execution permission for `./libuscuavactivity.so.1.1'
./libuscuavactivity.so.1.1: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./libuscuavactivity.so.1.1)
[dependent library list]
Tôi đoán đây là do sự không tương thích giữa các thư viện C trên hai nền tảng, với vấn đề là mã được biên dịch dựa trên phiên bản mới của glibc vv so với phiên bản có sẵn trên SuSE 10.2. Tôi đang đăng câu hỏi này về cơ hội không có cách nào để biên dịch mã trên nền tảng Fedora 11 của đối tác của chúng tôi theo cách mà nó cũng sẽ chạy trên SuSE 10.2.
trên cùng một kiến trúc? (i386! = amd64) – elmarco
Tôi nên đề cập rằng nền tảng xây dựng và nền tảng SuSE 10.2 mục tiêu đều là x86_64. –
Bạn kiểm tra định dạng tệp với objdump hoặc bằng cách thực thi .so (có, điều này là có thể). Nó sẽ là ELF, bởi vì nó được sử dụng từ thời kỳ đồ đá. Nếu bạn có phiên bản libc không tương thích, bạn sẽ nhận được thông báo lỗi cho biết chính xác điều đó - vì vậy, khả năng đoán của bạn rất có thể là sai và vấn đề có thể khác. – hirschhornsalz