使用的是这里打包的 emacs,通过对应的 scoop bucket 安装的,安装这个是因为,这个包带有 native compt 支持
安装完成后发现 emacs-rime 编译 dll 顺利,但是会报告以下问题:
rime--load-dynamic-module: Module could not be opened: "c:/Users/jinzh/.emacs.d/elpaca/builds/rime/librime-emacs.dll", "找不到指定的程序。"
通过 vs 的 dumpbin 分析 librime-emacs 动态链接库可以看到,仅仅是依赖三个库:
- KERNEL32.dll
- msvcrt.dll
- librime.dll
该三个库均确定在系统的 PATH 中,因为 scoop 源中官方的 emacs 加载 rime 模块很顺利
这究竟是为何呢?
并且已经通过以下代码测试过,该版本的 emacs 支持动态模块加载
(if (boundp 'module-file-suffix)
(message "Dynamic module loading is supported.")
(message "Dynamic module loading is not supported."))
yibie
3
rime–load-dynamic-module . 找不到程序
报错信息简化之后,好像再说找不到 Emacs 的动态模组。
yibie
5
你的配置包含这一句么?
(rime-emacs-module-header-root "/opt/homebrew/include")
但是 dll 编译是顺利的,还需要额外指定头文件吗
我在使用29.3的时候不加这个也没问题
yibie
8
不太清楚 Windows 下 Emacs 的配置和情况,自 24.1 之后就没有在 Windows 下用过 emacs。
但之前我看 emacs-rime 的配置上,说明了需要这个动态模组,去编译必须的文件。
解决了吗, 我也遇到相同的问题, 使用 scoop install emacs-kl 安装的
我的已经解决了,之前是通过scoop 安装了 gcc, mingw, librime等,现在是通过scoop 安装msys2, 然后把msys2的mingw64环境变量放到最前面,然后通过mingw64环境运行emacs,成功用上了rime
1.scoop install emacs-kl
2.scoop install msys2 (msys2安装 ucrt64的依赖)
3.ucrt64环境:手动执行下面的命令
gcc lib.c -o librime-emacs.dll -fPIC -O2 -Wall -I c:/Users/oj/scoop/apps/emacs-kl/current/include/ -shared -lrime
4.启动就正常了
1 个赞
我用ucrt的gcc编译后还是不行啊
$ gcc -v
Using built-in specs.
COLLECT_GCC=C:\Users\jinzh\scoop\apps\msys2\2024-07-27\ucrt64\bin\gcc.exe
COLLECT_LTO_WRAPPER=C:/Users/jinzh/scoop/apps/msys2/2024-07-27/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../gcc-14.2.0/configure --prefix=/ucrt64 --with-local-prefix=/ucrt64/local --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --with-native-system-header-dir=/ucrt64/include --libexecdir=/ucrt64/lib --enable-bootstrap --enable-checking=release --with-arch=nocona --with-tune=generic --enable-languages=c,lto,c++,fortran,ada,objc,obj-c++,rust,jit --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-filesystem-ts --enable-libstdcxx-time --disable-libstdcxx-pch --enable-lto --enable-libgomp --disable-libssp --disable-multilib --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-libiconv --with-system-zlib --with-gmp=/ucrt64 --with-mpfr=/ucrt64 --with-mpc=/ucrt64 --with-isl=/ucrt64 --with-pkgversion='Rev1, Built by MSYS2 project' --with-bugurl=https://github.com/msys2/MINGW-packages/issues --with-gnu-as --with-gnu-ld --disable-libstdcxx-debug --enable-plugin --with-boot-ldflags=-static-libstdc++ --with-stage1-ldflags=-static-libstdc++
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 14.2.0 (Rev1, Built by MSYS2 project)
把缺少的dll复制到emacs bin目录就可以了
1 个赞