Hello.
Suppose I have two C++ files, foo.cpp and bar.cpp, which are dependent on each other’s function definitions. Is it possible to compile both files in ROOT? I get an error if I just try
.L foo.cpp+
.
Hello.
Suppose I have two C++ files, foo.cpp and bar.cpp, which are dependent on each other’s function definitions. Is it possible to compile both files in ROOT? I get an error if I just try
.L foo.cpp+
.
Hi,
you could #include one file in the other, or create a thord file #including the two. Yes, also .cpp files can be #included
Cheers, Axel.
Thanks for the response. Bear with me for a moment. I just tried the following:
foo.cpp:
#include bar.cpp
#include bar.h
#include <stdio.h>
int main(void)
{
printf(word());
return 0;
}
bar.cpp:
char* word(void)
{
return "hello\n";
}
It compiles fine with g++.
When I run .L main.cpp+ I am told that a shared library has been made. Then when I run
main()
I get the following error:
root [1] main()
Error in <TApplication::TApplication>: only one instance of TApplication allowed
Note: File "iostream" already loaded
Note: File "_string" already loaded
Note: File "RtypesCint.h" already loaded
Note: File "DllImport.h" already loaded
root [0]
*** Break *** segmentation violation
Attaching to program: /proc/1032/exe, process 1032
[Thread debugging using libthread_db enabled]
0x0000003e14299d75 in waitpid () from /lib64/libc.so.6
#1 0x0000003e1423c331 in do_system () from /lib64/libc.so.6
#2 0x00002b661caee51c in TUnixSystem::StackTrace() () from /root/software/root/lib/libCore.so
#3 0x00002b661caeba4a in TUnixSystem::DispatchSignals(ESignals) () from /root/software/root/lib/libCore.so
#4 <signal handler called>
#5 0x00002b661ca1e6e9 in TBrowser::Add(TObject*, char const*, int) () from /root/software/root/lib/libCore.so
#6 0x00002b661cab6676 in TAutoInspector::Inspect(TClass*, char const*, char const*, void const*) () from /root/software/root/lib/libCore.so
#7 0x00002b661ccbcb91 in TObjString::ShowMembers(TMemberInspector&, char*) () from /root/software/root/lib/libCore.so
#8 0x00002b661caab43a in TClass::AutoBrowse(TObject*, TBrowser*) () from /root/software/root/lib/libCore.so
#9 0x00002b661e2a847d in TRint::Run(bool) () from /root/software/root/lib/libRint.so
#10 0x000000000040100d in main ()
A debugging session is active.
Inferior 1 [process 1032] will be detached.
Quit anyway? (y or n) [answered Y; input not from terminal]
Detaching from program: /proc/1032/exe, process 1032
Root >
Is calling main() the wrong way to run the compiled program?
Thanks!
Hi,
Just modify the name of your function main() to foo() and it should work.
The mean idea of a compiled macro is to have optimized functions and classes, not a main() function like C++.
Cheers.