久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

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

157次閱讀
沒有評論

共計 2312 個字符,預(yù)計需要花費 6 分鐘才能閱讀完成。

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

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

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

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

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

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

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

我搜索了這個問題(通過搜索“execve enoen”),找到了這個 stackoverflow 中的答案,它指出要運行二進(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ù)器上不存在,可能是因為 Xenial(Xenial 是 Ubuntu 16.04,本文應(yīng)該使用的是 18.04“Bionic Beaver”)安裝程序不支持 32 位二進(jìn)制文件(?),因此我需要嘗試一些不同的東西。

嘗試 2:安裝 Debian sqlite3 軟件包

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

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

嘗試 3:提取 Debian sqlite3 軟件包

我還嘗試僅從 Debian sqlite 軟件包中提取 sqlite3 二進(jìn)制文件并運行它。毫不意外,這也行不通,但這個更容易理解:我有舊版本的 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)行編譯

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

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

運行 ./configure

意識到我缺少依賴

再次運行 ./configure

運行 make

編譯失敗,因為我安裝了錯誤版本的依賴

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

編譯 SQLite 的方式如下:

從下載頁面下載整合的 tarball

運行 gcc shell.c sqlite3.c -lpthread -ldl

完成!!!

所有代碼都在一個文件(sqlite.c)中,并且沒有奇怪的依賴項!太奇妙了。

對我而言,我實際上并不需要線程支持或 readline 支持,因此我用編譯頁面上的說明來創(chuàng)建了一個非常簡單的二進(jìn)制文件,它僅使用了 libc 而沒有其他共享庫。

$ 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)

這很好,因為它使體驗 sqlite 變得容易

我認(rèn)為 SQLite 的構(gòu)建過程如此簡單很酷,因為過去我很樂于編輯 sqlite 的源碼來了解其 B 樹的實現(xiàn)方式。

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

上述就是丸趣 TV 小編為大家分享的如何進(jìn)行 SQLite 編譯了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-25發(fā)表,共計2312字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 贵南县| 鄂伦春自治旗| 观塘区| 商城县| 宣武区| 中卫市| 湖口县| 珠海市| 铜陵市| 富阳市| 潼关县| 黄石市| 佛教| 潍坊市| 武强县| 广州市| 大邑县| 长海县| 井冈山市| 永顺县| 墨竹工卡县| 临武县| 莫力| 页游| 泸水县| 湘西| 青龙| 台南市| 理塘县| 临潭县| 扶风县| 伊吾县| 阳江市| 梁山县| 辽宁省| 灵武市| 新乡县| 如东县| 沙雅县| 黄山市| 雷州市|