笔记2023年5月12日:QEMU模块化与自定义模块路径

用源码编译 QEMU Softmmu 时,在 ./configure 后加一参数 --enable-modules,即可对部分功能模块化(如 SDL、GTK、SPICE 等)编译:

./configure --enable-modules

编译出来的 ELF 文件并不直接链接到相关的动态共享库,而是用 dl_open 的方式动态加载相关库。已知 Alpine Linux 软件源的 QEMU 就是模块化编译的。 这样编译易于选择性移植。 移植的时候需要注意几个问题:

  1. qemu-system-* 默认在 /usr/local/lib/qemu目录下找相关的动态链接库,但是移植时不一定总能放在该目录(如果你没有提权)。这时可以设置环境变量 QEMU_MODULE_DIR 来设置动态链接模块库的目录。 export QEMU_MODULE_DIR=/path/to/dir
  2. 动态移植时往往需要同链接的库一起移植,而执行程序时往往在默认目录下找动态共享库(如 /usr/lib/arm-linux-gnueabihf)。这时同样可以设置环境变量 LD_LIBRARY_PATH 来指定动态链接共享库的查找目录。
经验分享 程序员 微信小程序 职场和发展