当前位置:首页>Linux>嵌入式Linux动静态库从零构建与交叉编译实战

嵌入式Linux动静态库从零构建与交叉编译实战

  • 2026-08-21 12:00:21
嵌入式Linux动静态库从零构建与交叉编译实战

裸机开发一个 main.c 编译到底,所有代码揉成一个二进制。上了 Linux,ls /lib 一看,满屏的 .so 和 .a。为什么要把代码拆成库?静态库动态库到底差在哪?交叉编译时 -L-I--sysroot 怎么配?这篇文章用 WSL 环境从零走一遍,附上:从零构建一个动态库 demo,每条命令都经过 WSL 实测验证。


一、先看现象:/lib 下为什么有 .so 和 .a

随便进一个 Linux 系统的 /lib 目录,你会看到两种截然不同的文件:

ls /lib/x86_64-linux-gnu/libc.a          libc.so.6        libm.so.6libpthread.a    libpthread.so.0  libdl.so.2

.a 是静态库(archive),本质是 .o 目标文件的打包集合。.so 是动态库(shared object),程序运行时才加载。

用 file 命令看得更清楚:

$ file /usr/lib/x86_64-linux-gnu/libc.alibc.a: current ar archive          # 一堆 .o 的 tar 包$ file /lib/x86_64-linux-gnu/libc.so.6libc.so.6: ELF 64-bit LSB shared object  # 可执行格式的共享库

本节要点.a 是编译时链接的静态库.so 是运行时加载的动态库file 命令能直接区分两者。


二、为什么需要动态库

MCU 裸机开发很少拆库——Flash 就那么大,代码全塞一起编译就行。但嵌入式 Linux 完全不同。

2.1 代码复用:别把 libc 塞进每个程序

如果不拆库,每个程序都要把自己用到的 printfmalloc 代码全部编译进去。一个系统跑几十个进程,磁盘和内存里全是重复代码。

$ ldd /bin/ls    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6# libc.so.6 只有一个副本,所有程序共享

2.2 升级不重编译

OpenSSL 出了安全补丁,只更新 libssl.so 一个文件,所有依赖它的程序自动生效。用静态库的话,每个程序都得重新编译、重新部署。

2.3 内存共享:动态库只加载一次

内核的 mmap 机制让同一个 .so 在物理内存中只存一份,多个进程的虚拟地址映射到同一块物理页。这对嵌入式设备的内存控制很关键——物理内存通常只有几百 MB,能省一点是一点。

本节要点:动态库解决三个核心问题——代码复用不重复打包、升级不重编译内存共享只加载一次。


三、动静态库优缺点对比

维度
静态库 .a
动态库 .so
链接时机
编译时链接进可执行文件
运行时动态加载
二进制大小
(库代码全拷进去)
(只有引用)
部署依赖
无外部依赖,单文件运行
依赖目标系统有对应 .so
升级方式
重编译所有依赖程序
替换 .so 即可
内存占用
每个进程独立拷贝
多进程共享同一物理页
启动速度
快(无需动态加载)
略慢(需符号解析)
版本管理
无版本冲突
可能出现版本不兼容
适用场景
极小系统、initramfs、关键安全模块
通用应用、插件系统、需要频繁更新的模块

本节要点:静态库适合极简固件和关键模块,动态库适合通用系统和需要热更新的场景。嵌入式里两者往往混用——核心用静态、上层用动态


四、交叉编译中怎么指定库

嵌入式开发不会在目标板(ARM)上编译,而是在 x86 主机上用交叉编译链编译。这就需要告诉编译器:库在哪、头文件在哪、目标系统根目录在哪。

4.1 核心参数速查

arm-linux-gnueabihf-gcc \  --sysroot=/path/to/target/rootfs \    # 目标系统根目录  -I/path/to/include \                   # 头文件搜索路径  -L/path/to/lib \                       # 库文件搜索路径  -lmylib \                              # 链接 libmylib.so 或 libmylib.a  -Wl,-rpath,/usr/lib \                  # 运行时库搜索路径(写入 ELF)  main.c -o app
参数
作用
示例
--sysroot
指定目标文件系统根目录,所有路径以此为基准
--sysroot=/home/hello/rootfs
-I
头文件搜索路径
-I/home/hello/rootfs/usr/include
-L
链接时库搜索路径
-L/home/hello/rootfs/usr/lib
-l
链接指定库(去掉 lib 前缀和扩展名)
-lmylib
 → libmylib.so
-Wl,-rpath
运行时库搜索路径(写入 ELF 的 RUNPATH
-Wl,-rpath,/usr/lib
-static
强制静态链接
不依赖任何 .so

4.2 环境变量

编译时和运行时,还有几个环境变量影响库的查找:

# 编译时:pkg-config 查找 .pc 文件export PKG_CONFIG_PATH=/home/hello/rootfs/usr/lib/pkgconfig# 编译时:C 编译器找头文件export C_INCLUDE_PATH=/home/hello/rootfs/usr/include# 运行时:动态链接器找 .so(优先级低于 rpath)export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib

4.3 运行时查找顺序

动态链接器(ld-linux.so)找库的优先级,从高到低:

本节要点:交叉编译核心三要素——--sysroot 定根、-I/-L 定搜索路径、-Wl,-rpath 定运行时路径。环境变量 LD_LIBRARY_PATH 是运行时兜底。


五、WSL 实操:从零构建一个动态库

附上:从零构建一个动态库 demo。下面在 WSL2(Ubuntu)环境里走一遍完整流程:写一个数学工具库,编译成静态库动态库,再用程序调用。每条命令都已在 WSL 中实测通过。

5.1 目录结构

mkdir -p ~/libdemo && cd ~/libdemomkdir src include lib build最终结构:libdemo/├── include/mymath.h      # 头文件├── src/mymath.c          # 库源码├── src/main.c            # 测试程序├── lib/                  # 生成库放这里└── build/                # 编译中间文件

5.2 写库代码

// include/mymath.h#ifndef MYMATH_H#define MYMATH_Hint add(int a, int b);int sub(int a, int b);int mul(int a, int b);double div_op(int a, int b);  // 返回 -1 表示除零#endif
// src/mymath.c#include "mymath.h"int add(int a, int b) { return a + b; }int sub(int a, int b) { return a - b; }int mul(int a, int b) { return a * b; }double div_op(int a, int b) {if (b == 0return -1.0;return (double)a / (double)b;}
// src/main.c#include <stdio.h>#include "mymath.h"int main(void) {printf("add(3, 4) = %d\n", add(34));printf("sub(10, 3) = %d\n", sub(103));printf("mul(6, 7) = %d\n", mul(67));printf("div(15, 4) = %.2f\n", div_op(154));return 0;}

5.3 编译静态库

# 第一步:编译成目标文件$ gcc -c -Iinclude src/mymath.c -o build/mymath.o# 第二步:打包成静态库$ ar rcs lib/libmymath.a build/mymath.o# 验证:查看静态库包含哪些 .o$ ar t lib/libmymath.amymath.o# 第三步:静态链接生成可执行文件(-static 强制全静态)$ gcc -Iinclude src/main.c -Llib -lmymath -static -o build/test_static# 运行$ ./build/test_staticadd(3, 4) = 7sub(10, 3) = 7mul(6, 7) = 42div(15, 4) = 3.75

5.4 编译动态库

# 第一步:编译成位置无关代码(-fPIC 是动态库的关键)$ gcc -c -fPIC -Iinclude src/mymath.c -o build/mymath_pic.o# 第二步:生成动态库$ gcc -shared -o lib/libmymath.so build/mymath_pic.o# 验证:查看动态库的符号表$ nm -D lib/libmymath.so | grep " T "00000000000010f9 T add000000000000113e T div_op0000000000001127 T mul0000000000001111 T sub# 第三步:链接动态库生成可执行文件$ gcc -Iinclude src/main.c -Llib -lmymath -Wl,-rpath,./lib -o build/test_dynamic# 检查依赖$ ldd build/test_dynamic    libmymath.so => ./lib/libmymath.so    # 找到了我们自己的库# 运行$ ./build/test_dynamicadd(3, 4) = 7sub(10, 3) = 7mul(6, 7) = 42div(15, 4) = 3.75

5.5 对比两个可执行文件

ls -lh build/test_*-rwxr-xr-x 1 root root  16K  build/test_dynamic      # 动态链接-rwxr-xr-x 1 root root 768K  build/test_static       # 静态链接(全静态)$ file build/test_staticbuild/test_static: ELF 64-bit LSB executable, statically linked$ file build/test_dynamicbuild/test_dynamic: ELF 64-bit LSB shared object, dynamically linked$ ldd build/test_static    not a dynamic executable          # 完全不依赖 .so$ ldd build/test_dynamic    libmymath.so => ./lib/libmymath.so    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6

静态链接把整个 libc 都嵌进去了,768K vs 16K,差了近 50 倍。换成实际项目里链接几十个库,差距会更大。

本节要点:静态库用 ar rcs 打包、动态库用 gcc -shared -fPIC。静态链接加 -static 得到完全独立的大体积二进制,动态链接用 -Wl,-rpath 把库路径写进 ELF,运行时不用设 LD_LIBRARY_PATH


六、常见问题排查

问题
现象
原因
解法
找不到 .so
error while loading shared libraries
运行时搜索路径不包含库目录
加 -Wl,-rpath 或设 LD_LIBRARY_PATH
版本不匹配
version GLIBCXX_3.4.26 not found
编译和运行时 libstdc++ 版本不同
静态链接 libstdc++ 或升级目标系统
忘记 -fPIC
relocation R_X86_64_32 against ...
动态库必须用位置无关代码编译
编译 .o 时加 -fPIC
交叉编译路径错误
cannot find -lmylib--sysroot
 和 -L 路径不匹配
先 ls 确认目标 rootfs 下库文件确实存在
静态库链接顺序不对
undefined reference
链接器从左到右解析,被依赖的库要放后面
-la -lb
:a 依赖 b,b 放最后

本节要点:动态库最常踩的两个坑——找不到 .so 和版本不匹配。前者靠 rpath 解决,后者要保证编译和运行环境一致。


七、总结

嵌入式 Linux 的库体系,本质是把"一个 main.c 编译到底"的裸机思维拆成**"核心 + 共享组件"**的模块化思维。

  • 静态库:编译时嵌入,ar rcs 打包,-static 链接。适合极简固件和关键模块,无外部依赖但体积大
  • 动态库:运行时加载,gcc -shared -fPIC 生成,-Wl,-rpath 指定路径。适合共享内存、热更新、插件化场景,体积小但依赖目标环境

交叉编译时,--sysroot 定目标根、-I/-L 定搜索路径、-Wl,-rpath 定运行时路径,配合 LD_LIBRARY_PATH 和 PKG_CONFIG_PATH,就能覆盖绝大多数库管理需求。

下次在嵌入式 Linux 上 ls /lib 看到满屏 .so 时,不妨把它当成系统在说:"代码拆成积木,想换哪块换哪块,别把所有东西焊死在一块板子上。"

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 22:50:53 HTTP/2.0 GET : https://f.mffb.com.cn/a/507255.html
  2. 运行时间 : 0.303733s [ 吞吐率:3.29req/s ] 内存消耗:4,740.19kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=fe81411eeb33497cfbe2c0464db2ad28
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001027s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001537s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.001375s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.002911s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001397s ]
  6. SELECT * FROM `set` [ RunTime:0.011105s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001920s ]
  8. SELECT * FROM `article` WHERE `id` = 507255 LIMIT 1 [ RunTime:0.003533s ]
  9. UPDATE `article` SET `lasttime` = 1787323853 WHERE `id` = 507255 [ RunTime:0.058265s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000837s ]
  11. SELECT * FROM `article` WHERE `id` < 507255 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001238s ]
  12. SELECT * FROM `article` WHERE `id` > 507255 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.004904s ]
  13. SELECT * FROM `article` WHERE `id` < 507255 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002612s ]
  14. SELECT * FROM `article` WHERE `id` < 507255 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.027835s ]
  15. SELECT * FROM `article` WHERE `id` < 507255 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002739s ]
0.307496s