Archived OpenModelica forums. Posting is disabled.

Alternative forums include GitHub discussions or StackOverflow (make sure to read the Stack Overflow rules; you need to have well-formed questions)


Forgot password? | Forgot username? | Register

calling c++ coin linear programming function from openmodelica

calling c++ coin linear programming function from openmodelica

Hello everyone and thank you in advance for your help
I would like  to call a external C++ function written in coin linear programming .test1.cpp whose code is

#include<iostream>
#include"include/coin/OsiSolverInterface.hpp"
#include "include/coin/OsiClpSolverInterface.hpp"
#include "CoinUtils/src/CoinPackedMatrix.hpp"
#include "CoinUtils/src/CoinPackedVector.hpp"

int linp(void)
{
    int nCons = 7;//Number of constraints
    int nVars = 2;//Number of variables
    double  Obj_Func[2] = {-1,-1/3};//Objective Function
    double conMatrix[14]={1,1/4,1,1,1,1/4,1,-1,-1/4,-1,-1,-1,-1,1};//Constraint Matrix
    double  conUB[7]={1/2,2,1,2,1,-1,2};//Constraint Upper Bound
    double  conLB[7] = {1/2, -10000000, -10000000, -10000000, -10000000, -10000000, -10000000}; //Constraint Lower Bound

    double  LB[2]={-1,-0.5};//Variable Lower Bound
    double UB[2]={1.5,1.25};//Variable Upper Bound
    double options[1]  = {3000.0};
    OsiSolverInterface* si = new OsiClpSolverInterface();
    //Defining the constraint matrix
    CoinPackedMatrix *matrix =  new CoinPackedMatrix(false , 0 , 0);
    matrix->setDimensions(0 , nVars);
    for(int i=0 ; i<nCons ; i++)
       {
            CoinPackedVector row;
         for(int j=0 ; j<nVars; j++)
        {
            row.insert(j, conMatrix[i+j*nCons]);
        }
            matrix->appendRow(row);
       }

    //setting options for maximum iterations
        si->setIntParam(OsiMaxNumIteration,options[0]);   

    //Load the problem to OSI
    si->loadProblem(*matrix , LB , UB, Obj_Func , conLB , conUB);

    //Solve the problem
    si->initialSolve();   
    //Output the solution to Scilab
    //get solution for x
    const double* xVal = si->getColSolution();
    double* xValue = const_cast<double*>(xVal);

    for (int i = 0; i<nVars;i++)
    {
        std::cout <<"var"<<i<<" = "<<xValue[i]<<"\n";
    }
   
    //get objective value
    double objValue = si->getObjValue();
   
    return 0;
}

it runs fine in gcc 
I have  converted it into object file test1-utf8.o using gcc in ubuntu 16.04
and i am calling it from the modelica code

model test1
function Ex
output Integer k;
external  k=linp()annotation(Include="#include\"test1-utf8.o\"",Library="OsiClp",Library="Clp",Library="ClpSolver",Library="CoinUtils",Library="Osi");
end Ex;
Integer k;
equation
k=Ex();
end test1;



it gives the error 

OMEdit-test1 Simulation Output

make -j2 -f test1.makefile
clang   -fPIC -O0 -march=native      "-I/home/fossee/Desktop/Extern_func/Resources/Include" -I"/usr/include/omc/c" -I. -DOPENMODELICA_XML_FROM_FILE_AT_RUNTIME -DOMC_MODEL_PREFIX=test1 -DOMC_NUM_MIXED_SYSTEMS=0 -DOMC_NUM_LINEAR_SYSTEMS=0 -DOMC_NUM_NONLINEAR_SYSTEMS=0 -DOMC_NDELAY_EXPRESSIONS=0 -DOMC_NVAR_STRING=0  -c -o test1.o test1.c
clang   -fPIC -O0 -march=native      "-I/home/fossee/Desktop/Extern_func/Resources/Include" -I"/usr/include/omc/c" -I. -DOPENMODELICA_XML_FROM_FILE_AT_RUNTIME -DOMC_MODEL_PREFIX=test1 -DOMC_NUM_MIXED_SYSTEMS=0 -DOMC_NUM_LINEAR_SYSTEMS=0 -DOMC_NUM_NONLINEAR_SYSTEMS=0 -DOMC_NDELAY_EXPRESSIONS=0 -DOMC_NVAR_STRING=0  -c -o test1_functions.o test1_functions.c
In file included from test1_functions.c:6:
In file included from ./test1_includes.h:4:
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:1: error: expected identifier or '('
<U+007F>ELF<U+0002><U+0001><U+0001>
^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:8: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001>
                                   ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:9: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000>
                                           ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:10: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000>
                                                   ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:11: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000>
                                                           ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:12: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000>
                                                                   ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:13: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                           ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:14: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                   ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:15: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                           ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:16: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                                   ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:18: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001>
                                                                                                                   ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:20: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>>
                                                                                                                            ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:22: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001>
                                                                                                                                            ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:23: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000>
                                                                                                                                                    ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:24: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000>
                                                                                                                                                            ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:25: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000>
                                                                                                                                                                    ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:26: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000><U+0000>
                                                                                                                                                                            ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:27: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                                                                                                                    ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:28: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                                                                                                                            ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:29: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                                                                                                                                    ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:30: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                                                                                                                                            ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:31: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                                                                                                                                                    ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:32: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                                                                                                                                                            ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:33: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                                                                                                                                                                    ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:34: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                                                                                                                                                                            ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:35: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                                                                                                                                                                                    ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:36: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                                                                                                                                                                                            ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:37: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                                                                                                                                                                                                    ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:38: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                                                                                                                                                                                                            ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:39: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                                                                                                                                                                                                                    ^
/home/fossee/Desktop/Extern_func/Resources/Include/test1-utf8.o:1:40: warning: null character ignored [-Wnull-character]
<U+007F>ELF<U+0002><U+0001><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0001><U+0000>><U+0000><U+0001><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
                                                                                                                                                                                                                                                                                            ^
30 warnings and 1 error generated.
<builtin>: recipe for target 'test1_functions.o' failed
make: *** [test1_functions.o] Error 1
make: *** Waiting for unfinished jobs....
Compilation process failed. Exited with code 2.


please tell me what is wrong in the above procedure as test1.cpp gives right answer when compiled and run in gcc ubuntu 16.04.

my Directory structure is as follows

                                                                         extern_Funct
                                                                                 Resoureces                                                                                         test1.mo
                                                                                     Include                                                     Library
                                                                                       test1-utf.o                                              linux 64
                                                                                                                                                       all the library files of coin linear programming                 


Re: calling c++ coin linear programming function from openmodelica

Man, I'm not an expert, but I think you are missing some basic concepts.

The Include statement inside your annotation regarding the external function is not intended for including compiled objects, but source files.
If you have compiled your code you should add it to the Library part.

Moreover, I can't see any header file. I'm not sure, but I think it's mandatory.

So, you can choose to do eiterh:
1. create a test1.h and test1.cpp, provide them to Modelica, both they should go in the Include statement (but Cpp is not fully supported, so I do not suggest this way)
2. create a test1.h and test1.cpp, compile them into a library (.so/.a) then provide Library={"test1","otherdependecies"} and Include="\"#include \"test1.h\"";

Hope to be of any help, but please do not refer to me as an expert; I may have said something wrong...

Re: calling c++ coin linear programming function from openmodelica

Thanks  a lot i will do the changes suggested and see if it works

There are 0 guests and 0 other users also viewing this topic
You are here: