rt_round redefinition problem

20 visualizaciones (últimos 30 días)
Gokhan Sahin
Gokhan Sahin el 16 de Jun. de 2023
Respondida: Mrutyunjaya Hiremath el 22 de Jul. de 2023
Hi everyone,
I'm using Matlab 2020a with Autosar platform. When I try to generate Autosar code for MPC series microcontroller, it always generates rt_roundd function and its extern. There is an error here, in the same C file, the function declaration is made with extern and the body of this function is in the same file. Then I try to compile the whole project, I get the redefinition error and I can't get past the linking phase. Below you can see the contents written in the C file.
extern real_T rt_roundd(real_T u);
// real_T rt_roundd(real_T u)
// {
// real_T y;
// if (fabs(u) < 4.503599627370496E+15) {
// if (u >= 0.5) {
// y = floor(u + 0.5);
// } else if (u > -0.5) {
// y = 0.0;
// } else {
// y = ceil(u - 0.5);
// }
// } else {
// y = u;
// }
// return y;
// }

Respuestas (1)

Mrutyunjaya Hiremath
Mrutyunjaya Hiremath el 22 de Jul. de 2023
It seems like you are encountering a conflict with the `rt_roundd` function in your MATLAB code generation for the Autosar platform. The issue you described occurs because the function is declared as `extern` in one place and defined in the same file. This can cause a redefinition error during the linking phase of compilation.
To resolve this issue, you can try the following steps:
  1. Check MATLAB Code Generation Options: In MATLAB, go to the "Code Generation" settings and ensure that the "Code interface packaging" option is set to "Nonreusable function." This should prevent the generation of the `rt_roundd` function as an `extern` in the generated code.
  2. Avoid Using Built-in Functions: If you have any custom code that uses the `rt_roundd` function, consider renaming that function to avoid conflicts with the built-in `rt_roundd` function in the generated code.
  3. Rename Conflicting Function: If you don't have control over the MATLAB-generated code, you can rename the conflicting `rt_roundd` function in your C code manually. For example, you can rename it to something like `my_rt_roundd` in both the function declaration and the function definition.
  4. Separate Declaration and Definition: If the function definition is provided separately from the declaration in the generated C code, you can modify the code to keep the declaration `extern` and place the function definition in a separate source file. This way, you won't have a redefinition conflict.
  5. Check for Code Generation Issues: Ensure that your MATLAB code is written correctly and doesn't contain any issues that might lead to conflicts in the generated C code.

Categorías

Más información sobre AUTOSAR Blockset en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by