-
February 19th, 2009, 06:27 AM
#1
Matlab in C :: linking problem
I am using DevC++ as compiler on Windows 2000.
I tried the code from Matlab's documentation to use matlab functions in C, but its giving an compile time error.
Code:
[Linker error] undefined reference to `engOpen'
// same for other matlab declarations and function calls
I have added the lib and include directories with matlab into the compiler options.
this is the code
Code:
/*
* engdemo.c
*
* This is a simple program that illustrates how to call the
* MATLAB engine functions from a C program.
*
* Copyright (c) 1984-2000 The MathWorks, Inc.
* Revision: 1.8 $
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "engine.h"
#define BUFSIZE 256
int main()
{
Engine *ep;
mxArray *T = NULL, *result = NULL;
char buffer[BUFSIZE];
double time[10] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0,
8.0, 9.0};
/*
* Start the MATLAB engine locally by executing the string
* "matlab".
*
* To start the session on a remote host, use the name of
* the host as the string rather than \0.
*
* For more complicated cases, use any string with whitespace,
* and that string will be executed literally to start MATLAB.
*/
if (!(ep = engOpen("\0"))) {
fprintf(stderr, "\nCan't start MATLAB engine\n");
return EXIT_FAILURE;
}
/*
* PART I
*
* For the first half of this demonstration, we will send data
* to MATLAB, analyze the data, and plot the result.
*/
/*
* Create a variable for our data.
*/
T = mxCreateDoubleMatrix(1, 10, mxREAL);
memcpy((void *)mxGetPr(T), (void *)time, sizeof(time));
/*
* Place the variable T into the MATLAB workspace.
*/
engPutVariable(ep, "T", T);
/*
* Evaluate a function of time, distance = (1/2)g.*t.^2
* (g is the acceleration due to gravity).
*/
engEvalString(ep, "D = .5.*(-9.8).*T.^2;");
/*
* Plot the result.
*/
engEvalString(ep, "plot(T,D);");
engEvalString(ep, "title('Position vs. Time for a falling object');");
engEvalString(ep, "xlabel('Time (seconds)');");
engEvalString(ep, "ylabel('Position (meters)');");
/*
* Use fgetc() to make sure that we pause long enough to be
* able to see the plot.
*/
printf("Hit return to continue\n\n");
fgetc(stdin);
/*
* We're done for Part I! Free memory, close MATLAB engine.
*/
printf("Done for Part I.\n");
mxDestroyArray(T);
engEvalString(ep, "close;");
/*
* PART II
*
* For the second half of this demonstration, we will request
* a MATLAB string, which should define a variable X. MATLAB
* will evaluate the string and create the variable. We
* will then recover the variable, and determine its type.
*/
/*
* Use engOutputBuffer to capture MATLAB output, so we can
* echo it back.
*/
engOutputBuffer(ep, buffer, BUFSIZE);
while (result == NULL) {
char str[BUFSIZE];
/*
* Get a string input from the user.
*/
printf("Enter a MATLAB command to evaluate. This command should\n");
printf("create a variable X. This program will then determine\n");
printf("what kind of variable you created.\n");
printf("For example: X = 1:5\n");
printf(">> ");
fgets(str, BUFSIZE-1, stdin);
/*
* Evaluate input with engEvalString.
*/
engEvalString(ep, str);
/*
* Echo the output from the command. First two characters
* are always the double prompt (>>).
*/
printf("%s", buffer+2);
/*
* Get result of computation.
*/
printf("\nRetrieving X...\n");
if ((result = engGetVariable(ep,"X")) == NULL)
printf("Oops! You didn't create a variable X.\n\n");
else {
printf("X is class %s\t\n", mxGetClassName(result));
}
}
/*
* We're done! Free memory, close MATLAB engine and exit.
*/
printf("Done!\n");
mxDestroyArray(result);
engClose(ep);
return EXIT_SUCCESS;
}
-
February 19th, 2009, 06:33 AM
#2
Re: Matlab in C :: linking problem
Well, you added the directories to the compiler options, now try to add corresponding matlab libraries to the linker options.
There must be a string when you enumerate libs which your program will be linked with. I mean *.lib and *.obj files.
-
February 20th, 2009, 07:46 AM
#3
Re: Matlab in C :: linking problem
Well thanks I finally got it to work; but creating a adding the libraries in the project options through DevC++ IDE.
Last edited by aniskhan; February 20th, 2009 at 07:49 AM.
-
July 8th, 2013, 09:50 AM
#4
Re: Matlab in C :: linking problem
Originally Posted by aniskhan
Well thanks I finally got it to work; but creating a adding the libraries in the project options through DevC++ IDE.
Hello,
I have the same problem with calling Matlab from C,
I am using DevC++ and Matlab 2011a, I added the libraries in the project options but I still have the same errors:
Errors:
[Linker error] undefined reference to `mxSetName'
[Linker error] undefined reference to `mxGetPr'
......
[Linker error] undefined reference to `engClose'
Can you please give me more details on how did you manage this problem
Thank you,
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|