Cơ chế tôi có xu hướng sử dụng là sự kết hợp của readelf -V
để kết xuất thông tin .gnu.version
từ libstdC++ và sau đó là bảng tra cứu khớp với giá trị lớn nhất GLIBCXX_
được trích xuất.
readelf -sV /usr/lib/libstdc++.so.6 | sed -n 's/.*@@GLIBCXX_//p' | sort -u -V | tail -1
nếu phiên bản của sort
là quá già để có -V
tùy chọn (trong đó phân loại theo số phiên bản) sau đó bạn có thể sử dụng:
tr '.' ' ' | sort -nu -t ' ' -k 1 -k 2 -k 3 -k 4 | tr ' ' '.'
thay vì sort -u -V
để sắp xếp theo lên đến 4 số phiên bản.
Nói chung, phù hợp với phiên bản ABI phải đủ tốt.
Nếu bạn đang cố gắng để theo dõi xuống libstdc++.so.<VERSION>
, tuy nhiên, bạn có thể sử dụng một chút bash như:
file=/usr/lib/libstdc++.so.6
while [ -h $file ]; do file=$(ls -l $file | sed -n 's/.*-> //p'); done
echo ${file#*.so.}
để cho hệ thống của tôi này mang lại 6.0.10
.
Nếu, tuy nhiên, bạn đang cố gắng để có được một nhị phân đã được biên dịch trên systemX để làm việc trên systemY, sau đó các loại điều sẽ chỉ giúp bạn có được cho đến nay. Trong những trường hợp, mang theo một bản sao của libstdC++ để được sử dụng cho các ứng dụng, và sau đó có một kịch bản chạy mà không một:.
export LD_LIBRARY_PATH=<directory of stashed libstdc++.so>
exec application.bin "[email protected]"
thường làm việc xung quanh vấn đề của .so đó là trên các hộp không tương thích với phiên bản từ ứng dụng. Đối với những khác biệt cực đoan trong môi trường, tôi có xu hướng chỉ thêm tất cả các thư viện phụ thuộc cho đến khi ứng dụng hoạt động đúng. Đây là tương đương với linux làm việc xung quanh những gì, cho các cửa sổ, sẽ được coi là dll hell.
Các datestamps được gần như hoàn toàn vô dụng, tôi không biết tại sao chúng ta bận tâm giữ cho chúng hoặc chủ tài liệu chúng. Ví dụ: ngày cho GCC 4.6.3 muộn hơn 4.7.0, nhưng 4.7.0 có nhiều tính năng hơn, vì vậy việc sử dụng nào là biết ngày được phát hành? –