加载自动加载文件时出现“无法打开加载文件”错误

Posted

技术标签:

【中文标题】加载自动加载文件时出现“无法打开加载文件”错误【英文标题】:"Cannot open load file" error when loading autoload file 【发布时间】:2018-01-23 17:00:49 【问题描述】:

我有一个名为“myloaddefs.el”的文件函数。它下面有神奇的注释和形式。

;;;###autoload
(defun an-awesome-function '()
   (interactive)
  "A descriptive comment." t)

;;; other descriptive comments and forms...

它的完整路径是~/.emacs.d/core/myloaddefs.el。 我还有一个完整路径为~/.emacs.d/.local/autoloads.el 的自动加载文件。我将它的路径存储在变量my-autoload-file中。

在调用update-file-autoloads之前,my-autoload-file只有一个空注释;;(确保它不为空,以免出错)。像我在下面那样调用update-file-autoloads 会返回零。当我检查my-autoload-file 时,它确实是用自动加载更新的。加载 'my-autoload-filereturnst` 似乎也很成功。

(update-file-autoloads (concat my-core-dir "myloaddefs.el") t my-autoload-file) ; => nil
(load-file my-autoload-file) ; => t

但是,在使用 M-x an-awesome-function 调用自动加载的交互函数后,我得到了 "Cannot open load file: no such file or directory" "../core/myautoloads"。这让我很困惑,因为目录和文件确实存在。这里有什么问题?

【问题讨论】:

【参考方案1】:

自动加载文件的路径需要在加载路径上,因为您使用相对路径来加载库(例如../core/autoloads)。我会在您创建路径的任何地方使用expand-file-name,而不是使用concat 构建它们。

在调用an-awesome-function(其定义不正确)之前尝试(push (expand-file-name ".local" "~") load-path)

【讨论】:

我更改了定义,所以它不正确。只是一个小的更正:我认为应该是(push (expand-file-name ".local" "~/.emacs.d/") load-path),但我理解你的意思没有问题。 也出于好奇,有没有办法使用绝对路径自动加载? update-file-autoloadsupdate-directory-autoloads 中没有参数来执行此操作。我能想到的唯一方法是在创建自动加载文件后使用replace-string 将相对路径替换为绝对路径。 我不确定,但您可以通过在 update-file-autoloads 上调用 edebug-defun 并逐步查看代码来找到答案

以上是关于加载自动加载文件时出现“无法打开加载文件”错误的主要内容,如果未能解决你的问题,请参考以下文章

加载 WAV 文件时出现 OpenAL 错误 40963

雪花:加载时出现错误限制时无法复制?

Android:执行时出现“无法重新加载 AVD 列表:”错误

使用冒号加载标签时出现 Pig xmlloader 错误

加载 Bigquery 表时出现内部错误

加载初始内容Adobe air时出现ADL错误