"No org-babel-execute function for c" und "no org-babel-execute function for c ++"


14

meine emacs version ist 24.3.1.

Ich verstehe, ich muss das ob-cel (verfügbar von hier ) in einen Pfad stellen, in dem Emacs es lesen kann.

Ich habe zuerst den Code aus dieser .el-Datei in meine .emacs-Datei kopiert und Emacs neu gestartet. Dann ging ich zu einem C-Code-Block (innerhalb einer Org-Datei) und versuchte, ihn auszuführen (mit Cc Cc). der Minipuffer sagte 'keine org-babel-execute-Funktion für C'. Die gleiche Geschichte spielte mit dem Versuch, einen C ++ - Codeblock auszuführen. Beachten Sie, dass R und Python in meinen Organisationsdateien perfekt ausgewertet werden. Die Probleme scheinen nur bei diesen kompilierten Sprachen zu liegen.

Ich habe dann versucht, dieses ob-cel in das ~ / .emacs.d-Verzeichnis zu schreiben, um zu sehen, ob das hilft. emacs neu gestartet und überprüft. es hat nicht funktioniert.

Dann habe ich versucht, es in ein Verzeichnis ~ / .emacs.d / lisp zu stellen und die folgenden Zeilen zu meiner .emacs-Datei hinzugefügt

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

Nach dem Neustart von emacs funktioniert das Auswerten der C- oder C ++ - Codeblöcke in einer Organisationsdatei immer noch nicht. Ich erhalte immer den gleichen Fehler "Keine org-babel-execute-Funktion für C" oder "Keine org-babel-execute-Funktion für C ++".

Aktualisieren

Ich habe meine Emacs-Version auf 24.5 aktualisiert und alle vorherigen elpa- und melpa-Unterverzeichnisse in meinem ~ / .emacs.d-Verzeichnis gelöscht. Ich habe den Verdacht, dass es mit der Reihenfolge zu tun hat, in der ich meine Bestellung aufgegeben habe

(custom-set-variables

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

und

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

Codeblöcke, ich setze die Last "ob-C.el" vor die Sache org-babel-load-languages. Ich habe dann den C ++ - Codeblock mehrmals ausgeführt. kein Glück.

Dann entfernte ich alles (bereinigte den Custom-Set-Variablen-Block in der .emacs-Datei) und nun sieht meine .emacs-Datei so aus

;; 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)))

Es funktioniert immer noch nicht.

Der Code, den ich versuche, in einem orgmode Puffer auszuwerten, ist:

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

Der My Messages Buffer sieht nach dem Neustart von Emacs und dem Versuch, den obigen Codeblock auszuführen, folgendermaßen aus:

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
Sie brauchen die loadund requireBits wirklich nicht . requirewird geladen (falls die Datei eine provideAnweisung hat, was in diesem Fall der Fall ist), aber Sie brauchen auch nicht die Anweisung, requireda dies von behandelt wird org-babel-do-load-languages. Sie müssen sicherstellen, dass sie angefordert wird, orgbevor dies geschieht. Ich glaube auch Cnicht c, hast du das versucht?
wvxvw

2
ohh verdammt ... es hat funktioniert! C (nicht c) und C ++ (nicht c ++) innerhalb des # + BEGIN_SRC-Blocks waren das, was es brauchte, nachdem alle 'load'-Anweisungen in der richtigen Reihenfolge ausgeführt wurden. Vielen Dank Alter !
Arjun J Rao

Antworten:


22

Sie brauchen wirklich nur dieses Bit in Ihrer Init-Datei:

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

Beachten Sie, dass es eine Hauptstadt ist C. Dies ermöglicht es Babel, C-, C ++ - und D-Quellblöcke zu verarbeiten.


1
Es funktioniert immer noch nicht. Ich habe auch versucht, den früheren Ob-c.el-Mist zu entfernen. Funktioniert immer noch nicht. Dieselbe Fehlermeldung "Keine org-babel-execute-Funktion für c ++"
Arjun J Rao

1
@ArjunJRao haben Sie den Code nach dem Hinzufügen ausgewertet? (Es ist in Ordnung, es mehrmals zu bewerten). Die Fehlermeldung bedeutet technisch gesehen, dass keine org-babel-execute:c++Funktion gefunden werden konnte, die in definiert werden würde. ob-C.elUm Babel jedoch mitzuteilen, dass sie geladen ob-C.elwerden muss, muss sie aufgerufen werden org-babel-do-load-languages.
wvxvw

Ich habe meine Frage aktualisiert.
Arjun J Rao
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.