Thanks for the response. On my machine, I get the undefined references even with GCC 5 (gcc version 5.2.1 20151010 (Ubuntu 5.2.1-22ubuntu2)), if I put -lm before the source file name. As far as a patch, I can try but this would be my first time really playing with org-mode code. As far as I can see, I would need to add the following lines in ob-C.el: L133: (libs (cdr (assoc :libs params))) (libs (mapconcat 'identity (if (listp libs) libs (list libs)) " ")) L142: (format "%s -o %s %s %s %s" ;; (added %s) L147: libs Am I missing anything? Oz On Fri, Mar 11, 2016 at 1:52 PM, Thierry Banel wrote: > To summarize this thread: > It seems there was an issue long ago. > Version 5 of GCC magically fixed it. > But it is still here for older compilers. > > ------------------------- > > To debug, execute the following piece of lisp code: > > (defadvice org-babel-eval (before xxx (cmd body)) > "" > (message "org-babel-eval : %s" cmd)) > (ad-activate 'org-babel-eval) > > The actual compilation command will be displayed in the *Messages* buffer. > > With your example, we get > > gcc -o /tmp/babel-8412zIw/C-bin-8412IZR -lm > /tmp/babel-8412zIw/C-src-84127OL.c > > -------------------------- > > You are right, Oz, this can be fixed in line 147. > But :flags is intended for flags like -g or -O, which need to appear > before the source file. > > Probably we are missing an additional flag, which could be named :libs > Then your example would be: > > #+BEGIN_SRC C :includes '( ) :libs -lm > int i=9; > printf("%d\n",(int)sqrt(i)); > #+END_SRC > > -------------------------- > > Oz, do you think you would be able to provide a patch? > The way to contribute is documented here: > http://orgmode.org/worg/org-contribute.html#orgheadline1 > > Thanks for reporting. > Thierry > > > Le 06/03/2016 23:44, Oz Ben-Ami a écrit : > > Hi, > > > > I'm a new org user, and I'm sorry if I'm missing something obvious. > > When executing a C code snippet with org-babel, that contains a math > > function, I get the famous "undefined reference" errors. I tried > > adding ":flags -lm", but that doesn't help. Looking at the code, it > > seems the -lm flag is inserted in the wrong place, before the source > > file. An easy change would be in line 147 of ob-C.el version > > 8.3.4-634, moving "flags" to after the source file. This seems to > > work, but I don't know if it would break anything else. > > > > A minimal working example, attached, includes the following snippet: > > > > #+BEGIN_SRC C :includes '( ) :flags -lm > > int i=9; > > printf("%d\n",(int)sqrt(i)); > > #+END_SRC > > > > Note the issue disappears if constants are directly used rather than > > variables, presumably because the function call is optimized away > > entirely. > > > > Any thoughts are appreciated. > > > > Oz > > >