Generating PIL from S-Function Unresolved symbol during linking
3 ビュー (過去 30 日間)
古いコメントを表示
I have some c code that is wrapped in an s-function using legacy_code().
The S-Function has to call c initialisation function void init_Code();
def.StartFcnSpec = ['void init_Code(void)'];
legacy_code() generates the sfunction withought error.
I then add some bus input/outpt to the sfunction and then generate a PIL block out of that so I can deploy it to a microcontroller. If I don't set the StartFcn this works prefectly fine.
With the StartFcn I get compilation error.
undefined first referenced
symbol in file
--------- ----------------
_init_Code ../sfunksCode.obj
error: unresolved symbols remain
error: errors encountered during linking; "sfunksCode.out" not built
Note that the undefined symbol has a leading underscore ( _ ) before the function name.
I had a look at the generated c code and there is no "_init_Code" anywhere in any of the generated files.
The s-function initialisation block looks fine:
44 /* Model initialize function */
45 void sfunksCode_initialize(void)
46 {
47 /* Registration code */
48
49 /* initialize error status */
50 rtmSetErrorStatus(sfunksCode_M, (NULL));
51
52 /* external inputs */
53 sfunksCode_U.input = sfunksCode_rtZsfunkCodeBUS;
54
55 /* external outputs */
56 (void) memset(&sfunksCode_Y.output[0], 0,
57 5U*sizeof(real32_T));
58
59 /* Start for S-Function (customCode): '<Root>/customCode' incorporates:
60 * Inport: '<Root>/ input'
61 * Outport: '<Root>/output'
62 */
63 init_Code();
64 }
Notice the init function is correctly called.
And this only happens at the linker stage ie all the sources compile fine.
I also created another function named _init_Code() which just calles my original init function to see if that would do as a work around, however I get the exact same error.
I'm guessing Coder is doing something exciting and helpful that I need to switch off?
**Edit: Further investigation suggests that this might be related to the specific micro controller which is a TI C2000 Delfino
1 件のコメント
回答 (1 件)
Antonin
2018 年 4 月 18 日
Hi Michael,
The linker doesn't know where to find the init_code() function that you are using in you S-function. You need to add the C file where it is declared as a Custom Code source file. Open the configuration parameters of the model (Ctl+E) then go to Code Generation --> Custom Code --> Additional build information --> Source files and list the C file where the init_function resides. This will do the trick. I hope it helps,
Antonin.
参考
カテゴリ
Help Center および File Exchange で Deployment, Integration, and Supported Hardware についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!