[julia-users] Errors while trying to use cxx and embed Julia together

2015-07-14 Thread Kostas Tavlaridis-Gyparakis
Hello again,
I am running Julia Version 0.4.0-dev+5841 (installed from source code) 
and currently run Ubuntu 15.04.
I am trying to write a julia file that will call some c++ classes and 
functions, where inside
these functions some other Julia functions will be used and I face some 
errors.
Let me get things one by one.

This is my c++ files: 

1) The cpp of the class (ArrayMaker.cpp):

#include ArrayMaker.h
#include iostream
using namespace std;
ArrayMaker::ArrayMaker() {
// TODO Auto-generated constructor stub
}
ArrayMaker::~ArrayMaker() {
// TODO Auto-generated destructor stub
}
double ArrayMaker::ArrayMak(int iNum, float fNum) {
jl_init_with_image(/home/kostav/julia/usr/lib/julia, sys.so);
jl_eval_string(print(sqrt(2.0)));
cout  Got arguments:   iNum  , and   fNum  endl;
 double sol;
  jl_load(/home/kostav/.julia/v0.4/loleee/src/loleee.jl);
jl_value_t * mod = (jl_value_t*)jl_eval_string(loleee);
jl_function_t * func = 
jl_get_function((jl_module_t*)mod,funior);
jl_value_t * argument = jl_box_float64(2.0);
jl_value_t * argument2 = jl_box_float64(3.0);
jl_value_t * ret = jl_call2(func, argument, argument2);
sol =  jl_unbox_float64(ret);
iNumber = iNum;
fNumber = fNum;
fArr = new float[iNumber];
jl_atexit_hook();
return sol;
}
float* ArrayMaker::fillArr() {
cout  Filling the array  endl;
for (int i=0; i  iNumber; i++) {
fArr[i] = fNumber;
fNumber *= 2;
} 
return fArr;
}

2) The equivelant header file (ArrayMaker.h):

#ifndef ARRAYMAKER_H
#define ARRAYMAKER_H
#include julia.h

class ArrayMaker
{
public:
ArrayMaker();
virtual ~ArrayMaker();
double ArrayMak(int, float);
float* fillArr();

private:
int iNumber;
float fNumber;
float* fArr;
};
#endif

3) The main file (main.cpp):

#include ArrayMaker.h
#include iostream

using namespace std;

int main(int argc, char ** argv) {
ArrayMaker* FI_CSP=new ArrayMaker();
int a = 7;
float b = 4;
double z;
z = FI_CSP-ArrayMak(a,b);
coutendlTest =  z;
return 1;

}

Now inside the function ArrayMak I call a julia function that just takes 
two arguements and adds them and returns the value of the sum
this function is called by a module I made under the name lolee. Note that 
when I compile and run this code with the equivelant makefile
it works properly.
Now next thing I do is to create the shared library that I need to pass to 
the cxx, just so that you can have a look in every single line I write
this is the makefile I use to create the shared library:

# define the C compiler to use
CC = g++
# define any compile-time flags
CFLAGS = -fPIC -Wall -g -Wl,-rpath,/home/kostav/julia/usr/lib 
LDFLAGS = -shared
# define any directories containing header files other than /usr/include
#
INCLUDES = -I /home/kostav/julia/src -I /home/kostav/julia/usr/include -I 
/home/kostav/julia/src/support -I /home/kostav/julia/contrib
# define library paths in addition to /usr/lib
#   if I wanted to include libraries not in /usr/lib I'd specify
#   their path using -Lpath, something like:
LFLAGS = -L/home/kostav/julia/usr/lib 
# define any libraries to link into executable:
#   if I want to link in libraries (libx.so or libx.a) I use the -llibname 
#   option, something like (this will link in libmylib.so and libm.so:
LIBS = -ljulia -lLLVM-3.7svn
# define the C source files
SRCS = main.cpp ArrayMaker.cpp
# define the C object files 
#
# This uses Suffix Replacement within a macro:
#   $(name:string1=string2)
# For each word in 'name' replace 'string1' with 'string2'
# Below we are replacing the suffix .c of all words in the macro SRCS
# with the .o suffix
#
OBJS = $(SRCS:.c=.o)
# define the shared library 
MAIN = test.so
#
# The following part of the makefile is generic; it can be used to 
# build any executable just by changing the definitions above and by
# deleting dependencies appended to the file from 'make depend'
#
.PHONY: depend clean

all:$(MAIN)
@echoSimplecompilernamedmycchasbeen
compiled
$(MAIN): $(OBJS) 
$(CC) $(CFLAGS) $(INCLUDES) -o $(MAIN) $(OBJS) $(LFLAGS) $(LIBS) 
$(LDFLAGS)
# this is a suffix replacement rule for building .o's from .c's
# it uses automatic variables $: the name of the prerequisite of
# the rule(a .c file) and $@: the name of the target of the rule (a .o 
file) 
# (see the gnu make manual section about automatic variables)
.c.o:
$(CC) $(CFLAGS) $(INCLUDES) -c $  -o $@
clean:
$(RM) *.o *~ $(MAIN)
depend: $(SRCS)
makedepend $(INCLUDES) $^
# DO NOT DELETE THIS LINE -- make depend needs it

So after that I end up with the shared library test.so. Then I write the 
following julia file where I try to do a call
of the c++ class that has inside the call to the julia function to check 
that it works with the following julia file:

using Cxx
# Importing shared library and header file
const 

Re: [julia-users] Errors while trying to use cxx and embed Julia together

2015-07-14 Thread Keno Fischer
There's theoretically nothing wrong with this, but you do need to setup the
include paths for Cxx. There's addHeaderDir for this purpose.

On Tue, Jul 14, 2015 at 12:38 PM, Kostas Tavlaridis-Gyparakis 
kostas.tavlari...@gmail.com wrote:

 Hello again,
 I am running Julia Version 0.4.0-dev+5841 (installed from source code)
 and currently run Ubuntu 15.04.
 I am trying to write a julia file that will call some c++ classes and
 functions, where inside
 these functions some other Julia functions will be used and I face some
 errors.
 Let me get things one by one.

 This is my c++ files:

 1) The cpp of the class (ArrayMaker.cpp):

 #include ArrayMaker.h
 #include iostream
 using namespace std;
 ArrayMaker::ArrayMaker() {
 // TODO Auto-generated constructor stub
 }
 ArrayMaker::~ArrayMaker() {
 // TODO Auto-generated destructor stub
 }
 double ArrayMaker::ArrayMak(int iNum, float fNum) {
 jl_init_with_image(/home/kostav/julia/usr/lib/julia, sys.so);
 jl_eval_string(print(sqrt(2.0)));
 cout  Got arguments:   iNum  , and   fNum  endl;
  double sol;
   jl_load(/home/kostav/.julia/v0.4/loleee/src/loleee.jl);
 jl_value_t * mod = (jl_value_t*)jl_eval_string(loleee);
 jl_function_t * func =
 jl_get_function((jl_module_t*)mod,funior);
 jl_value_t * argument = jl_box_float64(2.0);
 jl_value_t * argument2 = jl_box_float64(3.0);
 jl_value_t * ret = jl_call2(func, argument, argument2);
 sol =  jl_unbox_float64(ret);
 iNumber = iNum;
 fNumber = fNum;
 fArr = new float[iNumber];
 jl_atexit_hook();
 return sol;
 }
 float* ArrayMaker::fillArr() {
 cout  Filling the array  endl;
 for (int i=0; i  iNumber; i++) {
 fArr[i] = fNumber;
 fNumber *= 2;
 }
 return fArr;
 }

 2) The equivelant header file (ArrayMaker.h):

 #ifndef ARRAYMAKER_H
 #define ARRAYMAKER_H
 #include julia.h

 class ArrayMaker
 {
 public:
 ArrayMaker();
 virtual ~ArrayMaker();
 double ArrayMak(int, float);
 float* fillArr();

 private:
 int iNumber;
 float fNumber;
 float* fArr;
 };
 #endif

 3) The main file (main.cpp):

 #include ArrayMaker.h
 #include iostream

 using namespace std;

 int main(int argc, char ** argv) {
 ArrayMaker* FI_CSP=new ArrayMaker();
 int a = 7;
 float b = 4;
 double z;
 z = FI_CSP-ArrayMak(a,b);
 coutendlTest =  z;
 return 1;

 }

 Now inside the function ArrayMak I call a julia function that just takes
 two arguements and adds them and returns the value of the sum
 this function is called by a module I made under the name lolee. Note that
 when I compile and run this code with the equivelant makefile
 it works properly.
 Now next thing I do is to create the shared library that I need to pass to
 the cxx, just so that you can have a look in every single line I write
 this is the makefile I use to create the shared library:

 # define the C compiler to use
 CC = g++
 # define any compile-time flags
 CFLAGS = -fPIC -Wall -g -Wl,-rpath,/home/kostav/julia/usr/lib
 LDFLAGS = -shared
 # define any directories containing header files other than /usr/include
 #
 INCLUDES = -I /home/kostav/julia/src -I /home/kostav/julia/usr/include -I
 /home/kostav/julia/src/support -I /home/kostav/julia/contrib
 # define library paths in addition to /usr/lib
 #   if I wanted to include libraries not in /usr/lib I'd specify
 #   their path using -Lpath, something like:
 LFLAGS = -L/home/kostav/julia/usr/lib
 # define any libraries to link into executable:
 #   if I want to link in libraries (libx.so or libx.a) I use the -llibname
 #   option, something like (this will link in libmylib.so and libm.so:
 LIBS = -ljulia -lLLVM-3.7svn
 # define the C source files
 SRCS = main.cpp ArrayMaker.cpp
 # define the C object files
 #
 # This uses Suffix Replacement within a macro:
 #   $(name:string1=string2)
 # For each word in 'name' replace 'string1' with 'string2'
 # Below we are replacing the suffix .c of all words in the macro SRCS
 # with the .o suffix
 #
 OBJS = $(SRCS:.c=.o)
 # define the shared library
 MAIN = test.so
 #
 # The following part of the makefile is generic; it can be used to
 # build any executable just by changing the definitions above and by
 # deleting dependencies appended to the file from 'make depend'
 #
 .PHONY: depend clean

 all:$(MAIN)
 @echoSimplecompilernamedmycchasbeen
 compiled
 $(MAIN): $(OBJS)
 $(CC) $(CFLAGS) $(INCLUDES) -o $(MAIN) $(OBJS) $(LFLAGS) $(LIBS)
 $(LDFLAGS)
 # this is a suffix replacement rule for building .o's from .c's
 # it uses automatic variables $: the name of the prerequisite of
 # the rule(a .c file) and $@: the name of the target of the rule (a .o
 file)
 # (see the gnu make manual section about automatic variables)
 .c.o:
 $(CC) $(CFLAGS) $(INCLUDES) -c $  -o $@
 clean:
 $(RM) *.o *~ $(MAIN)
 depend: $(SRCS)
 makedepend $(INCLUDES) $^
 # DO NOT