emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* C++ code block not linked
@ 2017-11-25 14:59 Roger Mason
  2017-11-25 15:38 ` Thierry Banel
  0 siblings, 1 reply; 9+ messages in thread
From: Roger Mason @ 2017-11-25 14:59 UTC (permalink / raw)
  To: Org-Mode

Hello,

This code compiles fine on command line but org-babel can't link it.

#+BEGIN_SRC C++ :flags "-std=c++11 -I/usr/local/include" :libs  "-L/usr/local/lib -lginac"
#include <iostream>
#include <ginac/ginac.h>
using namespace std;
using namespace GiNaC;

int main () {
    symbol a("a"), b("b"), x("x"), y("y");
    lst eqns, vars;
    eqns = a*x+b*y==3, x-y==b;
    vars = x, y;
    cout << lsolve(eqns, vars) << endl;
     // -> {x==(3+b^2)/(b+a),y==(3-b*a)/(b+a)

return 0;
}
#+END_SRC

The error buffer contains many lines like this:

/tmp//ccv5YYn1.o: In function `main':
C-src-1046xti.cpp:(.text+0x67): undefined reference to `GiNaC::symbol::symbol(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'


Org mode version 9.0.3 (release_9.0.3-170-gfed1cf @
/home/rmason/.emacs.d/org-git/org-mode/lisp/)

GNU Emacs 25.3.1 (i386-portbld-freebsd10.3, GTK+ Version 3.22.15) of
2017-11-22

Thanks for any help.

Roger

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: C++ code block not linked
  2017-11-25 14:59 C++ code block not linked Roger Mason
@ 2017-11-25 15:38 ` Thierry Banel
  2017-11-26 11:42   ` Roger Mason
  0 siblings, 1 reply; 9+ messages in thread
From: Thierry Banel @ 2017-11-25 15:38 UTC (permalink / raw)
  To: emacs-orgmode

On 25/11/2017 15:59, Roger Mason wrote:
> Hello,
>
> This code compiles fine on command line but org-babel can't link it.
>
> #+BEGIN_SRC C++ :flags "-std=c++11 -I/usr/local/include" :libs  "-L/usr/local/lib -lginac"
> #include <iostream>
> #include <ginac/ginac.h>
> using namespace std;
> using namespace GiNaC;
>
> int main () {
>      symbol a("a"), b("b"), x("x"), y("y");
>      lst eqns, vars;
>      eqns = a*x+b*y==3, x-y==b;
>      vars = x, y;
>      cout << lsolve(eqns, vars) << endl;
>       // -> {x==(3+b^2)/(b+a),y==(3-b*a)/(b+a)
>
> return 0;
> }
> #+END_SRC
>
> The error buffer contains many lines like this:
>
> /tmp//ccv5YYn1.o: In function `main':
> C-src-1046xti.cpp:(.text+0x67): undefined reference to `GiNaC::symbol::symbol(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
>
>
> Org mode version 9.0.3 (release_9.0.3-170-gfed1cf @
> /home/rmason/.emacs.d/org-git/org-mode/lisp/)
>
> GNU Emacs 25.3.1 (i386-portbld-freebsd10.3, GTK+ Version 3.22.15) of
> 2017-11-22
>
> Thanks for any help.
>
> Roger
>
>

I get the correct result:

#+RESULTS:
| {x==(3+b^2)*(a+b)^(-1) | y==-(-3+a*b)*(a+b)^(-1)} |

I use Or mode version 9.1.1

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: C++ code block not linked
  2017-11-25 15:38 ` Thierry Banel
@ 2017-11-26 11:42   ` Roger Mason
  2017-11-27  7:33     ` Thierry Banel
  0 siblings, 1 reply; 9+ messages in thread
From: Roger Mason @ 2017-11-26 11:42 UTC (permalink / raw)
  To: emacs-orgmode

Hello,

Thierry Banel <tbanelwebmin@free.fr> writes:

> On 25/11/2017 15:59, Roger Mason wrote:
>> This code compiles fine on command line but org-babel can't link it.
>>
>> #+BEGIN_SRC C++ :flags "-std=c++11 -I/usr/local/include" :libs  "-L/usr/local/lib -lginac"
>> #include <iostream>
>> #include <ginac/ginac.h>
>> using namespace std;
>> using namespace GiNaC;
>>
>> int main () {
>>      symbol a("a"), b("b"), x("x"), y("y");
>>      lst eqns, vars;
>>      eqns = a*x+b*y==3, x-y==b;
>>      vars = x, y;
>>      cout << lsolve(eqns, vars) << endl;
>>       // -> {x==(3+b^2)/(b+a),y==(3-b*a)/(b+a)
>>
>> return 0;
>> }
>> #+END_SRC
>>
>> The error buffer contains many lines like this:
>>
>> /tmp//ccv5YYn1.o: In function `main':
>> C-src-1046xti.cpp:(.text+0x67): undefined reference to `GiNaC::symbol::symbol(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
>>
>
> I get the correct result:
>
> #+RESULTS:
> | {x==(3+b^2)*(a+b)^(-1) | y==-(-3+a*b)*(a+b)^(-1)} |
>
> I use Or mode version 9.1.1

I just upgraded to Org mode version 9.1.3 (release_9.1.3-185-g579fa1 @
/home/rmason/.emacs.d/org-git/lisp/) and I'm still getting the link
error.

Cheers,
Roger

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: C++ code block not linked
  2017-11-26 11:42   ` Roger Mason
@ 2017-11-27  7:33     ` Thierry Banel
  2017-11-27 11:04       ` Roger Mason
  0 siblings, 1 reply; 9+ messages in thread
From: Thierry Banel @ 2017-11-27  7:33 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/html, Size: 2416 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: C++ code block not linked
  2017-11-27  7:33     ` Thierry Banel
@ 2017-11-27 11:04       ` Roger Mason
  2017-11-28 17:08         ` C++ code block not linked [SOLVED] Roger Mason
  0 siblings, 1 reply; 9+ messages in thread
From: Roger Mason @ 2017-11-27 11:04 UTC (permalink / raw)
  To: Thierry Banel; +Cc: emacs-orgmode

Hello Thierry,

Thierry Banel <tbanelwebmin@free.fr> writes:

> You may try to mimic org-babel in a shell, and see what happens.
>
> cd /tmp/babel-29466ws7
> g++ -std=c++11 -I/usr/local/include C-src-29466moy.cpp -L/usr/local/lib -lginac
>
> (of course you need to change the random names like babel-29466ws7 by the actual ones as generated
> on your system).

It compiles fine:

c++  -std=c++11 -I/usr/local/include -L/usr/local/lib -lginac C-src-1053hn1.cpp

C-src-1053hn1.cpp:16:10: warning: 'operator=' is deprecated [-Wdeprecated-declarations]
    eqns = a*x+b*y==3, x-y==b;
         ^
/usr/local/include/ginac/container.h:199:27: note: 'operator=' declared here
        container_init<ex, STLT> operator=(const ex & x) attribute_deprecated;
                                 ^
C-src-1053hn1.cpp:17:10: warning: 'operator=' is deprecated [-Wdeprecated-declarations]
    vars = x, y;
         ^
/usr/local/include/ginac/container.h:199:27: note: 'operator=' declared here
        container_init<ex, STLT> operator=(const ex & x) attribute_deprecated;
                                 ^
2 warnings generated.

Thanks for your help
Roger

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: C++ code block not linked [SOLVED]
  2017-11-27 11:04       ` Roger Mason
@ 2017-11-28 17:08         ` Roger Mason
  2017-11-28 17:27           ` Thierry Banel
  0 siblings, 1 reply; 9+ messages in thread
From: Roger Mason @ 2017-11-28 17:08 UTC (permalink / raw)
  To: emacs-orgmode

Hello,

Roger Mason <rmason@MUN.CA> writes:

> It compiles fine:
>
> c++ -std=c++11 -I/usr/local/include -L/usr/local/lib -lginac
> C-src-1053hn1.cpp

Solved by setting:

(setq org-babel-C++-compiler "c++")

I don't recall having had to do this before.

Phew! Very glad to have this working again.  I'm not aware of any other tool
that is as good as org-mode for literate programming and reproducible
research.  A big thank you to those who created and maintain it.

Cheers,
Roger

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: C++ code block not linked [SOLVED]
  2017-11-28 17:08         ` C++ code block not linked [SOLVED] Roger Mason
@ 2017-11-28 17:27           ` Thierry Banel
  2017-11-28 21:07             ` Nick Dokos
  0 siblings, 1 reply; 9+ messages in thread
From: Thierry Banel @ 2017-11-28 17:27 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/html, Size: 1789 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: C++ code block not linked [SOLVED]
  2017-11-28 17:27           ` Thierry Banel
@ 2017-11-28 21:07             ` Nick Dokos
  2017-11-29 15:38               ` Roger Mason
  0 siblings, 1 reply; 9+ messages in thread
From: Nick Dokos @ 2017-11-28 21:07 UTC (permalink / raw)
  To: emacs-orgmode

Thierry Banel <tbanelwebmin@free.fr> writes:

> On 28/11/2017 18:08, Roger Mason wrote:
>
>     Hello,
>     
>     Roger Mason <rmason@MUN.CA> writes:
>
>         It compiles fine:
>         
>         c++ -std=c++11 -I/usr/local/include -L/usr/local/lib -lginac
>         C-src-1053hn1.cpp
>         
>     Solved by setting:
>     
>     (setq org-babel-C++-compiler "c++")
>     
>     I don't recall having had to do this before.
>     
>     Phew! Very glad to have this working again.  I'm not aware of any other tool
>     that is as good as org-mode for literate programming and reproducible
>     research.  A big thank you to those who created and maintain it.
>     
>     Cheers,
>     Roger
>
> Good to know it is solved.
> You can customize this variable:
>   C-h v org-babel-C++-compiler
>
> In case someone else bump into a similar problem, the actual command launched by Babel can be obtained
> through the debugger:
>   M-x debug-on-entry RET org-babel-eval RET
>    evaluate the Babel block
> The debugger shows a line like this one:
>   * org-babel-eval("g++ -o /tmp/babel-3110Zeg/C-bin-3110Fwh -std=c++11 ...
> This works for many languages supported by Babel.
>

All very good info, but why did the OP not have a g++?  Using a
non-linux operating system? Using a non-GNU tool chain? Inquiring
minds want to know...

-- 
Nick

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: C++ code block not linked [SOLVED]
  2017-11-28 21:07             ` Nick Dokos
@ 2017-11-29 15:38               ` Roger Mason
  0 siblings, 0 replies; 9+ messages in thread
From: Roger Mason @ 2017-11-29 15:38 UTC (permalink / raw)
  To: Nick Dokos; +Cc: emacs-orgmode

Hello,

Nick Dokos <ndokos@gmail.com> writes:

> All very good info, but why did the OP not have a g++?  Using a
> non-linux operating system? Using a non-GNU tool chain? Inquiring
> minds want to know...

Running on FreeBSD 10.3, which uses clang/clang++ by default.  That
said, I _do_ have gcc 5.4.0 installed and accessible as gcc/g++, so I
don't know why it did not work.

Cheers,
Roger

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2017-11-29 15:38 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-25 14:59 C++ code block not linked Roger Mason
2017-11-25 15:38 ` Thierry Banel
2017-11-26 11:42   ` Roger Mason
2017-11-27  7:33     ` Thierry Banel
2017-11-27 11:04       ` Roger Mason
2017-11-28 17:08         ` C++ code block not linked [SOLVED] Roger Mason
2017-11-28 17:27           ` Thierry Banel
2017-11-28 21:07             ` Nick Dokos
2017-11-29 15:38               ` Roger Mason

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).