Message Boards Message Boards

7 Replies
3 Total Likes
View groups...
Share this post:

problems with LibraryFunctionLoad

Posted 10 years ago
7 Replies
Posted 10 years ago

Hi, I’m trying out Mathematica to connect our shared library to Mathematika but I have problems during running functions in the shared Library. So I started with a test shared library. Some parts work fine so far. At first what worked:

1.  AppendTo[$LibraryPath,  ToFileName["/slowfs/lithop4-nb-2/egger/Mathematica/Tests"]];

2.  LibraryLoad["libtestlib"]

3.  INTTEST2 =  LibraryFunctionLoad["libtestlib", "Inttest2", {Integer, Integer}, Integer]

That worked so far. But running

INTTEST2[10, 101]

returned an error message:

LibraryFunction::rterr: An error with return code -1429266942 was encountered evaluating the function Inttest2. >>

I used Red Hat Enterprise Linux Client release 5.7 (Tikanga) and gcc version 4.1.2 20080704 (Red Hat 4.1.2-51). Building the test shared library was done by

gcc -c -g -fPIC testlib.cpp -I.

gcc -shared -o testlib.o

The console output from my shared library was:

Inttest2 parameter 1 is -1429266944 and parameter 2 is 2

Inttest parameter is -1429249280

I added two attachments testlibheader.txt that contains the header file testlib.h and testlibsource.txt in unix text format.

The interesting lines of the header are:

void Inttest1(int iTest);

int Inttest2(int iTest, int iTest2);

and of the cpp file are:

void Inttest1(int iTest) { std::cerr << "Inttest parameter is " << iTest << std::endl; }

long Inttest2(long iTest, long iTest2) { std::cerr << "Inttest2 new parameter 1 is " << iTest << " and parameter 2 is " << iTest2 << std::endl; long iSum = iTest + iTest2; return iSum; }

I hope you can help me with that problem. Kind regards, Roland


It looks like there is a misunderstanding here. LibraryFunctionLoad is not meant for loading and calling arbitrary C functions. You will need to write C functions that follow specific rules before they can be loaded using LibraryFunctionLoad. Please see the LibraryLink user guide on how to do this.

POSTED BY: Szabolcs Horvát
Posted 10 years ago

Hello Szabolcs,

thank you, too. I found a tutorial link above.

If you know another interesting link for me please send it. Best regards, Roland


From looking at the source you posted, you haven't included the WolframLibrary.h header or the DLLEXPORT type; have you gone through the LibraryLink "User Guide"?

In general, to call a function like this, you'll need some sort of interface function like:

DLLEXPORT int demo1_I_I( WolframLibraryData libData, mint Argc, MArgument *Args, MArgument Res) {
    mint I0;
    mint I1;
    I0 = MArgument_getInteger(Args[0]);
    I1 = I0 + 1;
    MArgument_setInteger(Res, I1);
    return LIBRARY_NO_ERROR;

(this gets an integer from M, add 1 to it, and then returns it to M)

POSTED BY: Nick Lariviere
Posted 10 years ago

Hi Nick, thank you for your answer. That is an interesting information. I tried to look into your link but I got only "Document Not Found". [\Freaked smiley] Oops, the page you are looking for cannot be found.

I found and read:

Ah, now I think I found it: Let's see if it helps me. If you have another link for me please send it.

Kind regards,


Posted 10 years ago


has anybody any experience with LibraryFunctionLoad?

Kind regards,


Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
or Discard

Group Abstract Group Abstract