真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何進(jìn)行SQLite編譯

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何進(jìn)行SQLite編譯,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)公司是一家專(zhuān)注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃、微信小程序、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動(dòng)互聯(lián)開(kāi)發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立10多年以來(lái),已經(jīng)為1000+成都紙箱各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的1000+客戶與我們一路同行,見(jiàn)證我們的成長(zhǎng);未來(lái),我們一起分享成功的喜悅。

上周,我一直在做一個(gè) SQL 網(wǎng)站。我使用 sqlite 運(yùn)行網(wǎng)站上的所有查詢(xún),并且我想在其中一個(gè)例子(這個(gè))中使用窗口函數(shù)。

但是我使用的是 Ubuntu 18.04 中的 sqlite 版本,它太舊了,不支持窗口函數(shù)。所以我需要升級(jí) sqlite!

事實(shí)證明,這個(gè)過(guò)程超麻煩(如通常一樣),但是非常有趣!我想起了一些有關(guān)可執(zhí)行文件和共享庫(kù)如何工作的信息,結(jié)論令人滿意。所以我想在這里寫(xiě)下來(lái)。

嘗試 1:從它的網(wǎng)站下載 SQLite 二進(jìn)制文件

SQLite 的下載頁(yè)面有一個(gè)用于 Linux 的 SQLite 命令行工具的二進(jìn)制文件的鏈接。我下載了它,它可以在筆記本電腦上運(yùn)行,我以為這就完成了。

但是后來(lái)我嘗試在構(gòu)建服務(wù)器(Netlify) 上運(yùn)行它,得到了這個(gè)極其奇怪的錯(cuò)誤消息:“File not found”。我進(jìn)行了追蹤,并確定 execve 返回錯(cuò)誤代碼 ENOENT,這意味著 “File not found”。這有點(diǎn)令人發(fā)狂,因?yàn)樵撐募_實(shí)存在,并且有正確的權(quán)限。

我搜索了這個(gè)問(wèn)題(通過(guò)搜索 “execve enoen”),找到了這個(gè) stackoverflow 中的答案,它指出要運(yùn)行二進(jìn)制文件,你不僅需要二進(jìn)制文件存在!你還需要它的加載程序才能存在。(加載程序的路徑在二進(jìn)制文件內(nèi)部)

要查看加載程序的路徑,可以使用 ldd,如下所示:

$ ldd sqlite3    linux-gate.so.1 (0xf7f9d000)    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7f70000)    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7e6e000)    libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf7e4f000)    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7c73000)    /lib/ld-linux.so.2

所以 /lib/ld-linux.so.2 是加載程序,而該文件在構(gòu)建服務(wù)器上不存在,可能是因?yàn)?Xenial(Xenial 是 Ubuntu 16.04,本文應(yīng)該使用的是 18.04 “Bionic Beaver”)安裝程序不支持 32 位二進(jìn)制文件(?),因此我需要嘗試一些不同的東西。

嘗試 2:安裝 Debian sqlite3 軟件包

好吧,我想我也許可以安裝來(lái)自 debian testing 的 sqlite 軟件包。嘗試從另一個(gè)我不使用的 Debian 版本安裝軟件包并不是一個(gè)好主意,但是出于某種原因,我還是決定嘗試一下。

這次毫不意外地破壞了我計(jì)算機(jī)上的 sqlite(這也破壞了 git),但我設(shè)法通過(guò) sudo dpkg --purge --force-all libsqlite3-0 恢復(fù)了,并使所有依賴(lài)于 sqlite 的軟件再次工作。

嘗試 3:提取 Debian sqlite3 軟件包

我還嘗試僅從 Debian sqlite 軟件包中提取 sqlite3 二進(jìn)制文件并運(yùn)行它。毫不意外,這也行不通,但這個(gè)更容易理解:我有舊版本的 libreadline(.so.7),但它需要 .so.8。

$ ./usr/bin/sqlite3./usr/bin/sqlite3: error while loading shared libraries: libreadline.so.8: cannot open shared object file: No such file or directory

嘗試 4:從源代碼進(jìn)行編譯

我花費(fèi)這么多時(shí)間嘗試下載 sqlite 二進(jìn)制的原因是我認(rèn)為從源代碼編譯 sqlite 既煩人又耗時(shí)。但是顯然,下載隨便一個(gè) sqlite 二進(jìn)制文件根本不適合我,因此我最終決定嘗試自己編譯它。

這有指導(dǎo):如何編譯 SQLite。它是宇宙中最簡(jiǎn)單的東西。通常,編譯的感覺(jué)是類(lèi)似這樣的:

  • 運(yùn)行 ./configure

  • 意識(shí)到我缺少依賴(lài)

  • 再次運(yùn)行 ./configure

  • 運(yùn)行 make

  • 編譯失敗,因?yàn)槲野惭b了錯(cuò)誤版本的依賴(lài)

  • 去做其他事,之后找到二進(jìn)制文件

編譯 SQLite 的方式如下:

  • 從下載頁(yè)面下載整合的 tarball

  • 運(yùn)行 gcc shell.c sqlite3.c -lpthread -ldl

  • 完成?。?!

所有代碼都在一個(gè)文件(sqlite.c)中,并且沒(méi)有奇怪的依賴(lài)項(xiàng)!太奇妙了。

對(duì)我而言,我實(shí)際上并不需要線程支持或 readline 支持,因此我用編譯頁(yè)面上的說(shuō)明來(lái)創(chuàng)建了一個(gè)非常簡(jiǎn)單的二進(jìn)制文件,它僅使用了 libc 而沒(méi)有其他共享庫(kù)。

$ ldd sqlite3    linux-vdso.so.1 (0x00007ffe8e7e9000)    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbea4988000)    /lib64/ld-linux-x86-64.so.2 (0x00007fbea4d79000)

這很好,因?yàn)樗贵w驗(yàn) sqlite 變得容易

我認(rèn)為 SQLite 的構(gòu)建過(guò)程如此簡(jiǎn)單很酷,因?yàn)檫^(guò)去我很樂(lè)于編輯 sqlite 的源碼來(lái)了解其 B 樹(shù)的實(shí)現(xiàn)方式。

鑒于我對(duì) SQLite 的了解,這并不令人感到意外(它在受限環(huán)境/嵌入式中確實(shí)可以很好地工作,因此可以以一種非常簡(jiǎn)單/最小的方式進(jìn)行編譯是有意義的)。 

上述就是小編為大家分享的如何進(jìn)行SQLite編譯了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


名稱(chēng)欄目:如何進(jìn)行SQLite編譯
鏈接分享:http://weahome.cn/article/ijopcj.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部