“对于c没有org-babel-execute函数”和“对于c ++没有org-babel-execute函数”


15

我的emacs版本是24.3.1。

我了解我必须将ob-C.el(可从此处获得)放在Emacs可以读取它的路径中。

我首先将代码从该.el文件复制粘贴到我的.emacs文件中,然后重新启动emacs。然后我去了C代码块(在org文件中)并尝试执行它(使用Cc Cc)。迷你缓冲区说“ C没有org-babel-execute函数”。试图执行C ++代码块也出现了同样的情况。请注意,R和python从我的org文件中评估完美。问题似乎仅在于这些编译语言。

然后,我尝试将这个ob-C.el放入〜/ .emacs.d目录中,以查看是否有帮助。重新启动emacs并检查。它没有用。

然后我尝试将其放入目录〜/ .emacs.d / lisp并将以下行添加到我的.emacs文件中

(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)

重新启动emacs之后,无法从组织文件中评估C或C ++代码块。我不断收到相同的错误“对于C没有org-babel执行功能”或“对于C ++没有org-babel执行功能”。

更新资料

我将emacs版本升级到24.5,删除了〜/ .emacs.d目录中所有以前的elpa和melpa子目录。怀疑这与我下达订单的顺序有关

(custom-set-variables

'(org-babel-load-languages
(quote
((emacs-lisp . t)
 (C . t)
 (css . t)
 (sh . t)
 (awk . t)
 (R . t))))

;; load the pathnames to custom lisp files
(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)

代码块,我将负载“ ob-C.el”放在org-babel-load-languages之前。然后,我多次执行了c ++代码块。没运气。

然后我删除了所有内容(清除了.emacs文件中的custom-set-variables块),现在我的.emacs文件看起来像

;; load the pathnames to custom lisp files
(add-to-list 'load-path "~/.emacs.d/lisp/")
(load "ob-C.el")
(require 'ob-C)

;; load the languages that are needed
(org-babel-do-load-languages
'org-babel-load-languages '((C . t)))

它仍然无法正常工作。

我尝试在orgmode缓冲区中评估的代码是:

#+BEGIN_SRC c
printf("Hello world");
#+END_SRC

重新启动emacs并尝试执行上述代码块后,我的消息缓冲区如下所示:

Loading /home/taeten/.emacs.d/lisp/ob-C.el (source)...done
Wrote /home/taeten/.emacs.d/.emacs.desktop.lock
Desktop: 1 frame, 0 buffers restored.
For information about GNU Emacs and the GNU system, type C-h C-a.
Quit [2 times]
Making completion list... [3 times]
org-babel-execute-src-block: No org-babel-execute function for c! [5   
times]
Ignoring unknown mode `elisp-mode'
File local-variables error: (void-function elisp-mode)
byte-code: Beginning of buffer [6 times]
byte-code: Beginning of buffer

2
您真的不需要loadrequire位。require确实会加载(如果文件中有一个provide语句,在这种情况下就是这样),但是您也不需要,require因为它是由处理的org-babel-do-load-languages,因此您需要确保org在进行任何操作之前先要求。另外,我认为C不是c,您尝试过吗?
wvxvw

2
哦,该死的...有效!#+ BEGIN_SRC块中的C(不是c)和C ++(不是c ++)是按照正确的顺序完成所有'load'语句之后的结果。非常感谢男人!
Arjun J Rao 2015年

Answers:


22

您实际上只需要在init文件中使用此位:

(org-babel-do-load-languages
 'org-babel-load-languages '((C . t)))

注意这是资本C。这使Babel能够处理C,C ++和D源块。


2
它仍然无法正常工作。我也尝试删除早期的ob-c.el废话。还是行不通。相同的错误消息“ C ++没有org-babel-execute函数”
Arjun J Rao 2015年

1
@ArjunJRao添加代码后您是否评估了代码?(可以多次评估它是可以的)。错误消息从技术上讲意味着它找不到org-babel-execute:c++在中定义的函数,ob-C.el但是告诉Babel需要加载的方法ob-C.el是调用org-babel-do-load-languages
wvxvw 2015年

我更新了我的问题。
Arjun J Rao
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.