国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

在Ubuntu-12.04環(huán)境下使用新的Rust開發(fā)工具

這篇具有很好參考價值的文章主要介紹了在Ubuntu-12.04環(huán)境下使用新的Rust開發(fā)工具。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在老舊的系統(tǒng)環(huán)境下使用Rust開發(fā)工具

筆者的一臺硬件資源緊張的舊電腦安裝了Ubuntu-12.04,希望在其上運(yùn)行比較新的Rust開發(fā)工具,但卻發(fā)現(xiàn)其因glibc較老,不能正常運(yùn)行cargo工具,結(jié)果如下:

yejq@UNIX:~$ uname -a
Linux UNIX 3.13.0-32-generic #57~precise1-Ubuntu SMP Tue Jul 15 03:51:20 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
yejq@UNIX:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 12.04.5 LTS
Release:	12.04
Codename:	precise
yejq@UNIX:~$ cargo new --bin hello
cargo: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.17' not found (required by cargo)

如上,cargo可執(zhí)行文件對glibc最低版本要求是GLIBC_2.17,而Ubuntu-12.04系統(tǒng)的glibc版本較低,因此不能正常運(yùn)行。一種可行的解決方法是使用docker容量在Ubuntu-12.04系統(tǒng)下使用新的Rust開發(fā)工具;但限于筆者對docker了解程度比較淺,并沒有嘗試該方法。筆者想到的方法也比較簡單直接(此前的博客對該方法有相關(guān)的說明):在Ubuntu-12.04系統(tǒng)上安裝Ubuntu-22.04系統(tǒng)的glibc動態(tài)庫(不替換原先的glibc庫),之后修改Rust開發(fā)工具的可執(zhí)行文件,強(qiáng)制其依賴新的glibc庫。

在Ubuntu-22.04下載并解壓新的glibc動態(tài)庫

首先,筆者需要另一臺安裝了較新版本Ubuntu的系統(tǒng)環(huán)境(Ubuntu-22.04),使用apt-get download命令下載四個相關(guān)的deb軟件包:

yejq@ubuntu:~/x64_libs$ apt-get download libc6
Get:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libc6 amd64 2.35-0ubuntu3.6 [3,236 kB]
Fetched 3,236 kB in 1s (2,870 kB/s)
yejq@ubuntu:~/x64_libs$ apt-get download libgcc-s1
Get:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libgcc-s1 amd64 12.3.0-1ubuntu1~22.04 [53.9 kB]
Fetched 53.9 kB in 0s (123 kB/s)     
yejq@ubuntu:~/x64_libs$ apt-get download libstdc++6
Get:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 libstdc++6 amd64 12.3.0-1ubuntu1~22.04 [699 kB]
Fetched 699 kB in 1s (1,158 kB/s)  
yejq@ubuntu:~/x64_libs$ apt-get download zlib1g
Get:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu jammy-updates/main amd64 zlib1g amd64 1:1.2.11.dfsg-2ubuntu9.2 [58.4 kB]
Fetched 58.4 kB in 0s (145 kB/s)  
yejq@ubuntu:~/x64_libs$ ls -lh *.deb
-rw-r--r-- 1 yejq yejq 3.1M Jan 10 20:40 libc6_2.35-0ubuntu3.6_amd64.deb
-rw-r--r-- 1 yejq yejq  53K Jun 29  2023 libgcc-s1_12.3.0-1ubuntu1~22.04_amd64.deb
-rw-r--r-- 1 yejq yejq 683K Jun 29  2023 libstdc++6_12.3.0-1ubuntu1~22.04_amd64.deb
-rw-r--r-- 1 yejq yejq  58K Oct 18  2022 zlib1g_1%3a1.2.11.dfsg-2ubuntu9.2_amd64.deb

之后再手動解壓這四個軟件包,其中包含了我們要在Ubuntu-12.04系統(tǒng)中安裝的動態(tài)庫。以libgcc-s1軟件包為例,下面是解壓的操作:

yejq@ubuntu:~/x64_libs$ ls -lh libgcc-s1_12.3.0-1ubuntu1~22.04_amd64.deb
-rw-r--r-- 1 yejq yejq 53K Jun 29  2023 libgcc-s1_12.3.0-1ubuntu1~22.04_amd64.deb
yejq@ubuntu:~/x64_libs$ ar x libgcc-s1_12.3.0-1ubuntu1~22.04_amd64.deb
yejq@ubuntu:~/x64_libs$ ls -lh control.tar.zst data.tar.zst debian-binary
-rw-r--r-- 1 yejq yejq 1.7K Feb 17 20:15 control.tar.zst
-rw-r--r-- 1 yejq yejq  51K Feb 17 20:15 data.tar.zst
-rw-r--r-- 1 yejq yejq    4 Feb 17 20:15 debian-binary
yejq@ubuntu:~/x64_libs$ tar -axf data.tar.zst
yejq@ubuntu:~/x64_libs$ find ./lib
./lib
./lib/x86_64-linux-gnu
./lib/x86_64-linux-gnu/libgcc_s.so.1
yejq@ubuntu:~/x64_libs$ mkdir -p lib64
yejq@ubuntu:~/x64_libs$ mv ./lib/x86_64-linux-gnu/* ./lib64/

如上,使用ar x命令解壓deb包可以獲得三個文件:control.tar.zst/data.tar.zst/debian-binary;之后再次解壓data.tar.zst,可得到./lib文件夾,其中包含了我們想要的動態(tài)庫。對另外三個deb需要重復(fù)這個解壓的操作。最后將所有的動態(tài)庫全部都集中到./lib64文件夾下,復(fù)制到Ubuntu-12.04系統(tǒng)中(注意軟鏈接的復(fù)制)。筆者得到的lib64文件夾中的內(nèi)容有(多了一些ncurses的庫):

yejq@ubuntu:~/x64_libs$ ls ./lib64
audit                   libmenu.so.6.3      libpthread.so.0
gconv                   libm.so.6           libresolv.so.2
ld-linux-x86-64.so.2    libmvec.so.1        librt.so.1
libanl.so.1             libncurses.so.6     libstdc++.so.6
libBrokenLocale.so.1    libncurses.so.6.3   libstdc++.so.6.0.30
libc_malloc_debug.so.0  libnsl.so.1         libthread_db.so.1
libc.so.6               libnss_compat.so.2  libtic.so.6
libdl.so.2              libnss_dns.so.2     libtic.so.6.3
libform.so.6            libnss_files.so.2   libtinfo.so.6
libform.so.6.3          libnss_hesiod.so.2  libtinfo.so.6.3
libgcc_s.so.1           libpanel.so.6       libutil.so.1
libmemusage.so          libpanel.so.6.3     libz.so.1
libmenu.so.6            libpcprofile.so     libz.so.1.2.11

在Ubuntu-12.04系統(tǒng)上修改新的glibc

筆者在Ubuntu-12.04系統(tǒng)下創(chuàng)建了/home/user/x64_libs文件夾,并將lib64文件夾復(fù)制到該目錄。之后筆者通過modify.sh腳本,直接修改了lib64中的動態(tài)庫:

root@UNIX:/home/user/x64_libs# ls
lib64  modify.sh
root@UNIX:/home/user/x64_libs# ./modify.sh
xxd -g 26 -l 26 -s 11712 lib64/gconv/gconv-modules.cache
INFO: processing [lib64/gconv/gconv-modules.cache], (/usr/lib/x86_64-linux-gnu/) replaced 1 time(s).
xxd -g 26 -l 26 -s 180311 lib64/ld-linux-x86-64.so.2
xxd -g 26 -l 26 -s 182135 lib64/ld-linux-x86-64.so.2
INFO: processing [lib64/ld-linux-x86-64.so.2], (/usr/lib/x86_64-linux-gnu/) replaced 2 time(s).
xxd -g 26 -l 26 -s 1951808 lib64/libc.so.6
xxd -g 26 -l 26 -s 1953808 lib64/libc.so.6
INFO: processing [lib64/libc.so.6], (/usr/lib/x86_64-linux-gnu/) replaced 2 time(s).
xxd -g 16 -l 16 -s 188955 lib64/ld-linux-x86-64.so.2
xxd -g 16 -l 16 -s 204139 lib64/ld-linux-x86-64.so.2
INFO: processing [lib64/ld-linux-x86-64.so.2], (/etc/ld.so.cache) replaced 2 time(s).
xxd -g 22 -l 22 -s 180288 lib64/ld-linux-x86-64.so.2
xxd -g 22 -l 22 -s 182112 lib64/ld-linux-x86-64.so.2
INFO: processing [lib64/ld-linux-x86-64.so.2], (/lib/x86_64-linux-gnu/) replaced 2 time(s).
xxd -g 9 -l 9 -s 180344 lib64/ld-linux-x86-64.so.2
xxd -g 9 -l 9 -s 182168 lib64/ld-linux-x86-64.so.2
INFO: processing [lib64/ld-linux-x86-64.so.2], (/usr/lib/) replaced 2 time(s).
xxd -g 5 -l 5 -s 26613 lib64/ld-linux-x86-64.so.2
xxd -g 5 -l 5 -s 44617 lib64/ld-linux-x86-64.so.2
xxd -g 5 -l 5 -s 180338 lib64/ld-linux-x86-64.so.2
xxd -g 5 -l 5 -s 182162 lib64/ld-linux-x86-64.so.2
INFO: processing [lib64/ld-linux-x86-64.so.2], (/lib/) replaced 4 time(s).
xxd -g 27 -l 27 -s 189539 lib64/ld-linux-x86-64.so.2
xxd -g 27 -l 27 -s 205047 lib64/ld-linux-x86-64.so.2
INFO: processing [lib64/ld-linux-x86-64.so.2], (/lib64/ld-linux-x86-64.so.2) replaced 2 time(s).
xxd -g 27 -l 27 -s 1982000 lib64/libc.so.6
INFO: processing [lib64/libc.so.6], (/lib64/ld-linux-x86-64.so.2) replaced 1 time(s).
`/lib64/ld-linux-x86-64.so.y' -> `/home/user/x64_libs/lib64/ld-linux-x86-64.so.2'

腳本modify.sh調(diào)用了筆者編寫的一個簡單的hed工具,用于批量替換二進(jìn)制文件中的字符串或二進(jìn)制數(shù)據(jù)(有需要可以聯(lián)系筆者),該腳本的內(nèi)容如下:

root@UNIX:/home/user/x64_libs# cat modify.sh 
#!/bin/bash

REPSTR='/home/user/x64_libs/lib64/'
OLDSTR='/usr/lib/x86_64-linux-gnu/'

if [ $UID -ne 0 ] ; then
	echo "Error, run again as root." 1>&2
	exit 1
fi

hed 'lib64/gconv/gconv-modules.cache' \
	'lib64/ld-linux-x86-64.so.2' \
	'lib64/libc.so.6' -s \
	"${OLDSTR}" "${REPSTR}"
sync ; sleep 1

# /lib/
# /usr/lib/
# /lib/x86_64-linux-gnu/
hed 'lib64/ld-linux-x86-64.so.2' -s \
	'/etc/ld.so.cache' \
	'/etc/ld.so.cachy' \
	'/lib/x86_64-linux-gnu/' \
	'/NON/x86_64-linux-gnu/' \
	'/usr/lib/' \
	'/usr/NON/' \
	'/lib/' \
	'/NON/'

sync ; sleep 1
hed 'lib64/ld-linux-x86-64.so.2' \
	'lib64/libc.so.6' -s \
	'/lib64/ld-linux-x86-64.so.2' \
	'/lib64/ld-linux-x86-64.so.y'

ln -sv "$(readlink -f ./lib64/ld-linux-x86-64.so.2)" \
	'/lib64/ld-linux-x86-64.so.y'

sync

該操作完成后,接下來就需要修改Rust開發(fā)工具了。

修改安裝于Ubuntu-12.04系統(tǒng)上的Rust工具鏈

筆者將Rust開發(fā)工具鏈安裝到了/opt/rust-lang路徑下(可參考筆者之前的相關(guān)博客);實際上,這個工具鏈?zhǔn)窃赨buntu-22.04下安裝的,之后筆者將其打包復(fù)制到了Ubuntu-12.04系統(tǒng)中。執(zhí)行以下命令,可以批量替換/opt/rust-lang路徑下的可執(zhí)行文件使用的動態(tài)鏈接器(從而強(qiáng)制其使用在Ubuntu-22.04系統(tǒng)下載的新的glibc動態(tài)庫):

root@UNIX:/opt/rust-lang# find ./ -type f -print0 | xargs -0 -i hed {} -s /lib64/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.y

以上命令執(zhí)行完成后,就可以在Ubuntu-12.04系統(tǒng)中正常使用新版本的Rust開發(fā)工具了:

yejq@UNIX:~$ cargo --version
cargo 1.72.1 (103a7ff2e 2023-08-15)
yejq@UNIX:~$ cargo new --bin hello
     Created binary (application) `hello` package
yejq@UNIX:~$ cd hello/
yejq@UNIX:~/hello$ ls
Cargo.toml  src
yejq@UNIX:~/hello$ cargo build --release -j1
   Compiling hello v0.1.0 (/home/yejq/hello)
    Finished release [optimized] target(s) in 1.00s
yejq@UNIX:~/hello$ ./target/release/hello 
Hello, world!

這種方法雖然可行,但仍存在一個問題:Ubuntu-12.04系統(tǒng)安裝的gcc版本太老了,它作為Rust在編譯構(gòu)建時的鏈接器,可能會存在鏈接失敗的問題。不過針對這個潛在的問題,我們?nèi)杂薪鉀Q方案:從此處下載新版本的gcc編譯器,通過TARGET_CC這一與Rust編譯鏈接相關(guān)的環(huán)境變量強(qiáng)制其使用新版本的gcc作為鏈接器;這里筆者就不展開了。

總結(jié)

這種修改、替換應(yīng)用使用的動態(tài)鏈接器(從而間接指定使用的glibc動態(tài)庫)的方法,可以方便地為老系統(tǒng)安裝一些新的應(yīng)用。在一些工作環(huán)境受限的條件下(如不能安裝新的系統(tǒng)作為開發(fā)環(huán)境),能夠讓我們不受過多的限制,不影響我們對開發(fā)工具的選擇。文章來源地址http://www.zghlxwxcb.cn/news/detail-829623.html

到了這里,關(guān)于在Ubuntu-12.04環(huán)境下使用新的Rust開發(fā)工具的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用Rust開發(fā)命令行工具

    使用Rust開發(fā)命令行工具

    生成二進(jìn)制文件,將其扔到環(huán)境變量的path下即可~ 用rust打造實時天氣命令行工具 [1] 找到合適的API 使用 該api [2] 如請求 api.openweathermap.org/data/2.5/weather?q=Beijingappid=your_key : 初始化項目coding 使用 cargo new rust_weather 初始化一個項目。 對于 cargo.toml 文件: 對于 src/main.rs 文件: 使用

    2024年02月11日
    瀏覽(18)
  • ubuntu20.04 ROS 環(huán)境下使用velodyne激光雷達(dá)

    ubuntu20.04 ROS 環(huán)境下使用velodyne激光雷達(dá)

    系統(tǒng)版本:ubuntu 20.04 ROS版本:noetic 激光雷達(dá)型號:velodyne VLP-16 網(wǎng)線接 PC/工控機(jī) 端口 將PC/工控機(jī)的網(wǎng)口配置為: ipv4,方式設(shè)置為手動 ip地址、掩碼以及網(wǎng)關(guān)設(shè)置成下圖 查看當(dāng)前話題 其中 /velodyne_points 就是 激光雷達(dá)發(fā)布的點云消息。 終端輸入rviz Fiex Frame 寫入 velodyne 添加

    2024年02月08日
    瀏覽(113)
  • 如何在 Ubuntu 20.04 上安裝 Rust

    前些天發(fā)現(xiàn)了一個人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,最重要的屌圖甚多,忍不住分享一下給大家。點擊跳轉(zhuǎn)到網(wǎng)站。 介紹 Rust 編程語言,是一種功能強(qiáng)大的通用編程語言。Rust 在語法上與C++類似,用于廣泛的軟件開發(fā)項目,包括瀏覽器組件、游戲引擎和操作系統(tǒng)。

    2024年04月15日
    瀏覽(42)
  • ubuntu22.04 x86環(huán)境上使用QEMU搭建arm虛擬機(jī)

    ubuntu22.04 x86環(huán)境上使用QEMU搭建arm虛擬機(jī)

    apt-get -y install qemu apt-get -y install bridge-utils apt-get -y install vnc4server apt-get -y install qemu-kvm apt install -y qemu-system-arm apt-get -y install libvirt0 apt-get -y install libvirt-daemon apt-get -y install libvirt-daemon-system 安裝完成后檢查: virsh version ls /usr/bin/|grep qemu wget http://releases.linaro.org/components/kernel/

    2024年02月07日
    瀏覽(24)
  • fabric 環(huán)境快速搭建--Ubuntu20.04系統(tǒng)下使用fabric官方腳本搭建

    fabric 環(huán)境快速搭建--Ubuntu20.04系統(tǒng)下使用fabric官方腳本搭建

    由于是初識hyper ledger fabric在安裝的時候遇到了很多的問題,最后在師兄的幫助下終于刪了從頭到尾安裝了一遍,因此想記錄一下,并且給和我遇到相同問題的小伙伴提供一些幫助。如果你是萌新,找我就對啦! 直接去官方下載即可 其他帖子上面有很多詳細(xì)步驟,這里不多贅

    2024年02月14日
    瀏覽(34)
  • 新的Ubuntu服務(wù)器上如何安裝深度學(xué)習(xí)環(huán)境的docker

    背景: 硬件:聯(lián)想的雙3090顯卡 總共 48GB顯存 4TB 刀片式服務(wù)器。 軟件:只安裝了nvidia的驅(qū)動,能用nvidia-smi查看顯卡信息,但是 nvcc -V看不到東西。 鏡像包是?nvidia_cu11_tf15.tar,里面包含 公司nvidia驅(qū)動和環(huán)境里的TensorFlow,torch 是不一樣的。一開始擔(dān)心 是不是 要 降級 Ubuntu下的

    2024年02月10日
    瀏覽(27)
  • Ubuntu20.04卸載cuda12.0

    剛裝cuda的時候沒仔細(xì)看版本,默認(rèn)安裝了cuda12.0,然后發(fā)現(xiàn)pytorch并不支持12.0的版本,于是卸載重裝,先貼解決辦法再吐槽:解決辦法是參考的Nvidia官方文檔 只需要兩步: 官方文檔中實際上是三步: 其中第二步是用來卸載nvidia驅(qū)動的,但是我想保留驅(qū)動而只卸載cuda所以就跳過了

    2024年02月11日
    瀏覽(24)
  • Ubuntu20.04安裝cuda12.11

    首先就是安裝顯卡驅(qū)動,我是雙3090,不知道為什么,官網(wǎng)死活安不上,最后從軟件更新那里直接安裝上了,繃不住了 首先從官網(wǎng)下載runfile文件 安裝的時候記得驅(qū)動和Kernel Objects 和 nvidia-fs不選 然后全劇終 等等,你還需要vim .bashrc,加入(版本替換成自己的) 改成清華源直接安

    2024年01月23日
    瀏覽(29)
  • Ubuntu22.04安裝NVIDIA驅(qū)動2022.12.25

    Ubuntu22.04安裝NVIDIA驅(qū)動2022.12.25

    lspci | grep -i nvidia 在官網(wǎng)中選擇合適自己的顯卡下載對應(yīng)驅(qū)動 下載地址 需要安裝 g++ gcc make三個依賴包 在安裝g++時遇到錯誤 :you do not appear to have libc header files install on your system 解決: 如果遇到: 下列軟件包有未滿足的依賴關(guān)系: libc6-dev : 依賴: libc6 (= 2.27-3ubuntu1.6) 但是 2.

    2024年02月04日
    瀏覽(41)
  • 關(guān)于Ubuntu22.04,ros2-humble環(huán)境下,使用gazebo遇到的問題。

    關(guān)于Ubuntu22.04,ros2-humble環(huán)境下,使用gazebo遇到的問題。

    遇到的問題: 打開gazebo時出現(xiàn)error:process has died的報錯,雖然仍然可以打開gazebo,但是gazebo顯示的并不是launch文件調(diào)用的world文件與urdf文件內(nèi)容,可能顯示前次使用gazebo時的內(nèi)容,或者出現(xiàn)機(jī)器人模型亂轉(zhuǎn)的情況。 問題原因: 前次使用gazebo后,沒有完全關(guān)閉gazebo,尤其是

    2024年02月15日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包