“c에 대한 org-babel-execute 기능 없음”및“c에 대한 org-babel-execute 기능 없음”


15

내 이맥스 버전은 24.3.1입니다.

나는 이맥스가 읽을 수있는 경로에 ob-C.el ( 여기 에서 사용 가능)을 넣어야한다는 것을 이해 합니다.

먼저 해당 .el 파일에서 내 .emacs 파일로 코드를 복사하여 붙여 넣은 다음 emacs를 다시 시작했습니다. 그런 다음 C 코드 블록 (org 파일 내)으로 가서 Cc Cc를 사용하여 실행하려고했습니다. 미니 버퍼는 'C에 대한 org-babel-execute 기능이 없다'고 말했다. 같은 이야기는 C ++ 코드 블록을 실행하려고 시도했을 때 발생했습니다. R과 python은 내 조직 파일 내에서 완벽하게 평가됩니다. 컴파일 된 언어에만 문제가있는 것 같습니다.

그런 다음이 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를 다시 시작한 후에는 org 파일 내에서 C 또는 C ++ 코드 블록을 평가해도 여전히 작동하지 않습니다. "C의 경우 org-babel-execute 기능 없음"또는 "C ++의 경우 org-babel-execute 기능 없음"과 동일한 오류가 계속 발생합니다.

최신 정보

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)

코드 블록, 난 org-babel-load-languages ​​일 전에 "ob-C.el"로드를 넣습니다. 그런 다음 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
당신은 정말로 loadand require비트 가 필요하지 않습니다 . require(파일 provide에이 문장이있는 경우)을로드하지만 ,에 require의해 처리되기 때문에 필요하지 않습니다 . 또한, 나는 그렇지 않다고 생각합니다 . org-babel-do-load-languagesorgCc
wvxvw

2
오 젠장 ... 효과가 있었어! # + BEGIN_SRC 블록 안의 C (c가 아님)와 C ++ (C ++ 아님)은 모든 'load'문을 올바른 순서로 수행 한 후 수행 한 것입니다. 고마워요!
Arjun J Rao

답변:


22

실제로 init 파일에는이 비트 만 필요합니다.

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

그것은 자본 C입니다. 이를 통해 Babel은 C, C ++ 및 D 소스 블록을 처리 할 수 ​​있습니다.


2
여전히 작동하지 않습니다. 이전 ob-c.el 쓰레기도 제거하려고했습니다. 그래도 작동이 안되는. 같은 오류 메시지가 "아니 조직 - 바벨 - 실행 C의 기능을 ++"
아르 준 J 라오

1
@ArjunJRao 코드를 추가 한 후 평가 했습니까? (여러 번 평가해도 괜찮습니다). 기술적으로 오류 메시지 org-babel-execute:c++는에 정의 된 함수를 찾을 수 없음을 의미 ob-C.el하지만로드해야한다는 것을 Babel에 알리는 방법 ob-C.el은을 호출하는 것 org-babel-do-load-languages입니다.
wvxvw

내 질문을 업데이트했습니다.
Arjun J Rao
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.