Câu hỏi này dường như được giải quyết đúng đắn trong một số câu hỏi và những nơi khác dễ dàng tìm thấy với Google, nhưng tôi không tìm thấy giải pháp thỏa đáng vì những lý do được giải thích dưới đây. Nhưng chỉ để hoàn thành, tôi đã bao gồm một số liên kết có liên quan:
https://askubfox.com/questions/138284/how-to-downgrade-a-package-via-apt-get https://askubfox.com/questions/428772/how-to-install-specific-version-of -một số gói / 428778 https://askubfox.com/questions/26498/choose-gcc-and-g-version ...
Và những người khác.
Tuy nhiên, câu hỏi này liên quan đến việc cài đặt một phiên bản GCC rất cụ thể trong Kali Linux, phiên bản không có sẵn như là một gói cụ thể. Cụ thể, câu hỏi liên quan đến cách cài đặt phiên bản 6.3.0, vì tôi cần phiên bản này để biên dịch một chương trình cụ thể: https://www.reddit.com/r/Monero/comments/6d0ah8/xmrig_miner_new_release/
(như một câu hỏi bổ sung, nếu có cách khắc phục vấn đề cụ thể hơn mà không sử dụng phiên bản GCC khác, vui lòng trả lời, nhưng tôi tin rằng câu hỏi này là chung chung và tôi muốn biết cách thực hiện bất kể làm thế nào để tạo liên kết chương trình nói trên một cách chính xác)
Các phiên bản có sẵn để cài đặt bất kỳ gói nào, ví dụ gcc, có thể được xác định bằng:
apt-cache showpkg gcc
Mà sẽ liệt kê các phiên bản có sẵn trong "phiên bản:", vd
4:7.2.0-1d1
4:4.9.2-2
Cài đặt sau đó đơn giản như ban hành
apt-get install gcc:4:4.9.2-2
Điều này sẽ cài đặt phiên bản cũ hơn 4: 4.9.2-2, bằng cách đơn giản (tôi tin) ghi đè lên bản cài đặt 7.2.0-1d1, nếu có.
Để có sẵn phiên bản 4: 4.9.2-2, tôi phải thêm deb
http://old.kali.org/kali sana main non-free contrib
vào /etc/apt/sources.list
tệp của mình
và sau đó chạy apt-get update
.
Tuy nhiên, nếu phiên bản tôi cần không được liệt kê thì sao?
Tôi đã thử nghiệm nhiều nguồn khác nhau, ví dụ như các nguồn được tìm thấy ở đây: http://snapshot.debian.org/ và tại nhiều câu hỏi và trang web khác từ các tìm kiếm của Google.
Hầu hết trong số họ cho tôi bỏ qua hoặc lỗi, ví dụ như sau
Ign:3 http://snapshot.debian.org/archive/debian/20091004T111800Z lenny InRelease
Ngay cả khi điều này sẽ hoạt động, nó có vẻ là một cách tiếp cận rất tệ để cài đặt một phiên bản cụ thể, vì thêm một số nguồn tùy ý có thể không có phiên bản cụ thể mà tôi muốn.
Nếu tôi tìm kiếm trên snapshot.debian.org cho gcc, tôi chỉ nhận được các phiên bản rất cũ: http://snapshot.debian.org/package/gcc/
Cuối cùng tôi đã trở nên thất vọng với cách tiếp cận này và biên dịch GCC 6.3.0 từ tarball nguồn. Quá trình biên dịch đã thành công, nhưng sau đó tôi phải đối mặt với cách cài đặt nó. Tôi thận trọng về việc chạy make install
như tôi sợ nó sẽ làm xáo trộn apt
và dpkg
và có thể phá vỡ hệ thống.
Thay vào đó, tôi đã cố gắng chạy nó từ thư mục build, trực tiếp. Tôi đã cố gắng chỉ đơn giản là thêm thư mục xây dựng như là mục đầu tiên trong PATH của tôi, nó không hoạt động. Sau đó, tôi đã cố gắng đổi tên /usr/bin/gcc
và thực hiện một liên kết tượng trưng từ /usr/bin/gcc
nơi cuộc sống thực thi gcc-6.3.0 của tôi. Điều này trình bày vấn đề sau:
cc: error trying to exec 'cc1': execvp: No such file or directory, which
Điều này đã được sửa với một mục khác trong PATH của tôi.
Sau đó, tôi nhận được lỗi này:
/usr/include/stdio.h:34:21: fatal error: stddef.h: No such file or directory
Mà tôi giả sử là vì một mục bị thiếu trong /usr/lib/gcc/x86_64-linux-gnu
. Tôi đã cố gắng tạo một liên kết tượng trưng từ 6 đến 6.3.0, nhưng điều này là không đủ. Tôi cũng đã cố gắng thực sự sao chép mọi thứ với cp -R
, kết quả tương tự.
Đây phải là một chương trình 64 bit, nhưng tôi cũng coi như vậy cho
/usr/lib/gcc/i686-linux-gnu
.
Tôi chắc chắn rằng tôi có thể bắt đầu thực hiện strace
để xem nó cố gắng mở các tệp từ đâu, đọc tệp nhật ký, đọc nguồn và cuối cùng tôi tưởng tượng rằng tôi có thể tìm ra cách hack cùng một giải pháp được hình thành kém. Nhưng thật tuyệt nếu ai đó có thể cho tôi biết làm thế nào để làm điều này một cách lành mạnh.