Making an executable with input arguments using codegen
6 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Yuval Geyari
am 4 Sep. 2018
Bearbeitet: Yuval Geyari
am 5 Sep. 2018
I'm trying to compile a Matlab code using codegen and making an executable. The thing is that after compilation, I can't seem to successfully call the app from matlab along with the relevant input. I'll explain:
To make things simple, let's assume that the purpose of my program is to create a '.txt' file named 'my_text.txt' and print an input string inside, like so:
function PrintMyString(input_str) %#codegen
fid = fopen('my_text.txt','w');
fprintf(fid,'My input string is: %s',input_str);
fclose(fid);
end
Now, I tried to compile the code above using the following script:
str = 'pre_defining_the_input_variable_by_example';
codegen -config config_obj PrintMyString -args {str}
when config_obj is the code generation configuration defined somewhere earlier.
The compilation was successful, but as I mentioned before, when I tried to activate the program it didn't go as planned. I tried various options for calling, such as:
system(['PrintMyString.exe ',str]);
The text file was created, but no input string was printed (all that appeared was the line "My input string is: ").
I also tried adding a main function that calls the original PrintMyString function, like so:
function main() %#codegen
str = 'some_string';
PrintMyString(str);
end
I compiled it like that:
str = 'pre_defining_the_input_variable_by_example';
codegen -config config_obj main PrintMyString -args {str}
And that worked, but obviously it doesn't help because the input string has to be sent to the program from outside.
Any ideas? What am I doing wrong?
0 Kommentare
Akzeptierte Antwort
Titus Edelhofer
am 4 Sep. 2018
Hi,
it's probably not a question of the code generation but your main file: you compile to an executable, so probably your config_obj carries the information about the main file that you have to have. This main file should be able to take string input and pass it to the generated C code.
Maybe you can share your main file and we can take a look.
Titus
5 Kommentare
Titus Edelhofer
am 5 Sep. 2018
Hi,
this is what I did: I used the coder app as well and
- specified myself the input to be char of size 1x:Inf(to have strings of undefined length as input).
- Selected executable
- Generated code
- Copied the generated example\main.c, main.h to mymain.c, mymain.h
- Made some changes (here the changed lines):
#include "mymain.h" // instead of #include "main.h"
static void main_PrintMyString(const char* str) // add str as input
input_str = emxCreateWrapper_char_T(str, 1, strlen(str)); // rows=1, cols = length of the input string
main_PrintMyString(argv[1]); // second input is the input parameter (first is the name of the executable)
- and added mymain.c on the "More Settings"->Custom Code->Additional Source files
- and generated code again
- and if everything works fine, call the executable :)
Titus
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu MATLAB Coder finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!