wangfenjin / simple

支持中文和拼音的 SQLite fts5 全文搜索扩展 | A SQLite3 fts5 tokenizer which supports Chinese and PinYin
https://www.wangfenjin.com/posts/simple-tokenizer/
MIT License
561 stars 76 forks source link

为啥 release 里的所有 aarch64 包,都是 x86-64 架构的呢? #154

Open wuxunfeng666 opened 2 weeks ago

wuxunfeng666 commented 2 weeks ago

这是这个插件的信息:

$ file libsimple*/*.so
libsimple-aarch64-linux-gnu-gcc-9/libsimple.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=37b831a21622a83263dbe83347421b2632a94be2, not stripped
libsimple-aarch64-linux-gnu-gcc/libsimple.so:   ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=83a8b043d8b1b46ac9c8aa68f102749c68fcd841, not stripped

查看 libsqlite3 的:

$ file /usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6
/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, BuildID[sha1]=f718ad7bb904e87edb0f5643c5c3fa415033c082, stripped

arm64 上的 SQLite 无论怎么写,都加载失败。。

$ sqlite3
SQLite version 3.45.1 2024-01-30 16:01:20
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .load ./libsimple-aarch64-linux-gnu-gcc/libsimple.so
Error: ./libsimple-aarch64-linux-gnu-gcc/libsimple.so.so: cannot open shared object file: No such file or directory
sqlite> .load ./libsimple-aarch64-linux-gnu-gcc/libsimple
Error: ./libsimple-aarch64-linux-gnu-gcc/libsimple.so: cannot open shared object file: No such file or directory
sqlite> .load './libsimple-aarch64-linux-gnu-gcc/libsimple'
Error: ./libsimple-aarch64-linux-gnu-gcc/libsimple.so: cannot open shared object file: No such file or directory
sqlite> .load './libsimple-aarch64-linux-gnu-gcc/libsimple.so'
Error: ./libsimple-aarch64-linux-gnu-gcc/libsimple.so.so: cannot open shared object file: No such file or directory
sqlite> .load './libsimple-aarch64-linux-gnu-gcc/simple'
Error: ./libsimple-aarch64-linux-gnu-gcc/simple.so: cannot open shared object file: No such file or directory
sqlite> .load './libsimple-aarch64-linux-gnu-gcc/simple.so'
Error: ./libsimple-aarch64-linux-gnu-gcc/simple.so.so: cannot open shared object file: No such file or directory
sqlite>
wangfenjin commented 2 weeks ago

.load ./libsimple-aarch64-linux-gnu-gcc/libsimple

No such file or directory

你看看报错啊。。。

wuxunfeng666 commented 1 week ago

@wangfenjin 文件是存在的,第一个代码框里,甚至都识别出是 x86-64 的动态库了。

后来我在 arm64 上重新编译后,能正常加载了。

第一个代码框,真不是代表《aarch64 包里的 .so,是 x86-64 架构》吗?

wuxunfeng666 commented 1 week ago

@wangfenjin 以下是详细执行过程,每句命令前附带注释,标明意图:

  1. 系统架构

    user@192.168.1.8's password:
    [LOGO]
    Welcome to Armbian OS 24.8.0 Noble with Linux 6.1.100-ophub
    
    # 七月份的系统,包含 Ubuntu Noble 的包,不算老旧以至于加载不上吧?
    user@armbian:~$ uname -a
    Linux armbian 6.1.100-ophub #1 SMP Thu Jul 25 01:56:29 EDT 2024 aarch64 aarch64 aarch64 GNU/Linux
  2. 自己编译后的库,正常加载,并使用 simple_query

    # 识别动态库文件类型
    user@armbian:~$ file ~/libsimple*/*.so
    /home/user/libsimple-aarch64-linux-gnu-gcc/libsimple.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, BuildID[sha1]=4fd8bb5ea11af51d5657463ad694d9b58ca2d679, not stripped
    
    # sqlite3 正常加载动态库,并使用库的函数
    user@armbian:~$ sqlite3
    SQLite version 3.45.1 2024-01-30 16:01:20
    Enter ".help" for usage hints.
    Connected to a transient in-memory database.
    Use ".open FILENAME" to reopen on a persistent database.
    sqlite> .load /home/user/libsimple-aarch64-linux-gnu-gcc/libsimple.so
    sqlite> SELECT simple_query('Hello World');
    ( h+e+l+l+o* OR hello* ) AND ( w+o+r+l+d* OR world* )
    sqlite>
  3. 下载 release 里的库,架构不对,加载不了

    # 下载压缩包
    user@armbian:/dev/shm$ wget -nv 'https://github.com/wangfenjin/simple/releases/download/v0.4.0/libsimple-aarch64-linux-gnu-gcc.
    zip'
    2024-09-02 11:37:24 URL:https://objects.githubusercontent.com/github-production-release-asset-2e65be/244509610/8bf4e083-b5e0-4723-ba98-d4d1e9a6bac0?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20240902%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240902T033712Z&X-Amz-Expires=300&X-Amz-Signature=2a087c55c037bb58a102d59a255042d574befda3cabf2786cb9ac079526e62ee&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=244509610&response-content-disposition=attachment%3B%20filename%3Dlibsimple-aarch64-linux-gnu-gcc.zip&response-content-type=application%2Foctet-stream [5319987/5319987] -> "libsimple-aarch64-linux-gnu-gcc.zip" [1]
    
    # 解压
    user@armbian:/dev/shm$ unzip libsimple*.zip
    Archive:  libsimple-aarch64-linux-gnu-gcc.zip
      creating: libsimple-aarch64-linux-gnu-gcc/
      creating: libsimple-aarch64-linux-gnu-gcc/dict/
     inflating: libsimple-aarch64-linux-gnu-gcc/dict/README.md
     inflating: libsimple-aarch64-linux-gnu-gcc/dict/stop_words.utf8
     inflating: libsimple-aarch64-linux-gnu-gcc/dict/jieba.dict.utf8
    extracting: libsimple-aarch64-linux-gnu-gcc/dict/user.dict.utf8
      creating: libsimple-aarch64-linux-gnu-gcc/dict/pos_dict/
     inflating: libsimple-aarch64-linux-gnu-gcc/dict/pos_dict/prob_start.utf8
     inflating: libsimple-aarch64-linux-gnu-gcc/dict/pos_dict/char_state_tab.utf8
     inflating: libsimple-aarch64-linux-gnu-gcc/dict/pos_dict/prob_emit.utf8
     inflating: libsimple-aarch64-linux-gnu-gcc/dict/pos_dict/prob_trans.utf8
     inflating: libsimple-aarch64-linux-gnu-gcc/dict/hmm_model.utf8
     inflating: libsimple-aarch64-linux-gnu-gcc/dict/idf.utf8
     inflating: libsimple-aarch64-linux-gnu-gcc/libsimple.so
    
    # 识别文件类型
    user@armbian:/dev/shm$ file */*.so
    libsimple-aarch64-linux-gnu-gcc/libsimple.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=83a8b043d8b1b46ac9c8aa68f102749c68fcd841, not stripped
    
    # sqlite3 加载不上
    user@armbian:/dev/shm$ sqlite3
    SQLite version 3.45.1 2024-01-30 16:01:20
    Enter ".help" for usage hints.
    Connected to a transient in-memory database.
    Use ".open FILENAME" to reopen on a persistent database.
    sqlite> .load /dev/shm/libsimple-aarch64-linux-gnu-gcc/libsimple.so
    Error: /dev/shm/libsimple-aarch64-linux-gnu-gcc/libsimple.so.so: cannot open shared object file: No such file or directory
    sqlite>
wangfenjin commented 1 week ago

我看下吧

wangfenjin commented 6 days ago

https://github.blog/news-insights/product-news/arm64-on-github-actions-powering-faster-more-efficient-build-systems/#get-started-using-arm-hosted-runners-today

可能是现在用的 qemu 模拟的方式有点问题,可以等年底 github 支持 arm 设备之后更新下脚本