Making an executable with input arguments using codegen

10 次查看(过去 30 天)
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?

采纳的回答

Titus Edelhofer
Titus Edelhofer 2018-9-4
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 个评论
Titus Edelhofer
Titus Edelhofer 2018-9-5
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
Yuval Geyari
Yuval Geyari 2018-9-5
编辑:Yuval Geyari 2018-9-5
It works great, thank you! Althougth I used a different input argument in the last line you mentioned:
main_PrintMyString(input_str);
And also, how exactly did you know to use the emxCreateWrapper_char_T function? It wasn't in the original example main.c file.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 MATLAB Coder 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by