Tôi đang cố gắng liên kết chương trình của tôi tĩnh với glibc, vì phiên bản glibc trên máy đích là khá khó lường. Tôi đã sử dụng cờ linker -static-libgcc và -static-libstdC++ và nó hoạt động tốt. Việc thực thi là lớn, nhưng tôi có thể sống với nó. Thật không may, khi tôi chạy thực thi của tôi trên máy mục tiêu (nó được đặt tên là 'mytest' trong ví dụ dưới đây) tôi nhận được lỗi sau:Chương trình không thể tìm thấy phiên bản chính xác của glibc/libstdC++, mặc dù nó đã được liên kết tĩnh
./mytest: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by libboost_log.so.1.53.0)
./mytest: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by libboost_log.so.1.53.0)
./mytest: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by libboost_log.so.1.53.0)
./mytest: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by libboost_date_time.so.1.53.0)
./mytest: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by libboost_thread.so.1.53.0)
Nếu tôi làm 'chuỗi' trên mytest, nó mang lại cho tôi
$ strings mytest | grep GLIBC
GLIBC_2.9
GLIBC_2.7
GLIBC_2.8
GLIBC_2.3.2
GLIBC_2.2.5
GLIBCXX_3.4.15
GLIBCXX_3.4.11
GLIBCXX_3.4.14
GLIBCXX_3.4.9
GLIBCXX_3.4
Điều gì có nghĩa là, tôi nghĩ rằng liên kết tĩnh đang hoạt động tốt. Tại sao bộ nạp vẫn cố gắng tìm các hàm của tôi trong glibc và libstdC++ được chia sẻ? Tôi đang làm gì sai?
Cảm ơn!
Rất cám ơn. Thật không may, tôi không thể liên kết tất cả mọi thứ tĩnh, bởi vì sau đó thư viện pthread của tôi không hoạt động. Vì lý do gì, nó chỉ hoạt động nếu nó được liên kết động. – svetlana
@svetlana 'libpthread' là một phần của glibc.Nếu bạn không thể liên kết nó tĩnh, thì bạn không thể có một tệp thực thi hoàn toàn tĩnh và điều đó ngụ ý rằng tệp thực thi của bạn sẽ * không bao giờ * hoạt động trên một hệ thống cũ hơn (điều đó không được hỗ trợ). Liên kết tĩnh * không * làm việc cho các chương trình đa luồng nói chung, vì vậy bạn cần phải tìm ra lý do tại sao nó không hoạt động cho trường hợp cụ thể của bạn, hoặc từ bỏ toàn bộ ý tưởng. –
@svetlana Đã cập nhật câu trả lời. –