- Index
- » Usage and Applications
- » OpenModelica Usage and Applications
- » calling c++ coin linear programming...
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...
- DarioMangoni
- 45 Posts
- Index
- » Usage and Applications
- » OpenModelica Usage and Applications
- » calling c++ coin linear programming...