codegen:- Problems when attempting to build a c++ based .exe rather than c?

4 次查看(过去 30 天)
I am having a few problems with using codegen (via the gui interface).
I have successfully built a very simple c based .exe program based on the following two files.
.m
function r = coderand() %#codegen
r = rand();
main.c
#include <stdio.h>
#include <stdlib.h>
#include "coderand.h"
int main()
{
printf("coderand=%g\n", coderand());
return 0;
}
If I now try and change out main.c for the same code in a main.cpp,
main.cpp
#include <stdio.h>
#include <stdlib.h>
#include "coderand.h"
void main(int argc, char **argv)
{
printf("coderand=%g\n", coderand());
}
I get the following compile errors.
main.obj : error LNK2019: unresolved external symbol "double __cdecl coderand(void)" (?coderand@@YANXZ) referenced in function _main 25 F:\CoderTest\coderand.exe : fatal error LNK1120: 1 unresolved externals
I assume it is because I am still building c code. What option do I have to change to fix this?

回答(2 个)

Kaustubha Govind
Kaustubha Govind 2012-4-16
You probably need to add a extern "C" { } block around the declaration for coderand() in coderand.h, so that the C++ compiler doesn't use C++ style linkage.
Or try:
extern "C" {
#include "coderand.h"
}

Adam Hartshorne
Adam Hartshorne 2012-4-16
I have found the solution...As suspected it was due to the codegen being set to build c rather than c++ code.
For those suffering a similar problem, you have to go to
Coder -> More Settings -> All Settings -> Advanced -> Language and change C to C++

类别

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

标签

Community Treasure Hunt

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

Start Hunting!

Translated by