Ansi-c in Visual Studio2022 linker (c unresolved symbol)
-
Hallo Leute,
ich habe eine A.h und eine A.c file in einem (C++ consolen) project in VS2022.
#ifndef A #define A extern int test(int a, int b); #endif // !A
A.c
#include "A.h" int test(int a, int b) { return a + b; }
main
#include "A.h" int main() { int h1 = test(3, 4); }
nun wird die A.c nicht mit gelinked! Includiere ich A.c geht es logischeweiße.
Habe ich eine C++ klasse mit h/cpp wird die cpp automatisch mit gelinkt, aber die c file wol nich!?
Oder handle ich grob fahrlässig?
-
@SoIntMan sagte in Ansi-c in Visual Studio2022 linker (c unresolved symbol):
#ifndef A #define A extern int test(int a, int b); #endif // !A
Nutze extern "C" wegen dem NameMangling.
#pragma once #ifdef __cplusplus extern "C" { #endif extern int test(int a, int b); #ifdef __cplusplus } #endif
-
ah jetzt funktioniert es, aber wie funktioniert das jetzt mit dem NameMangeling?
weil die __cplusplus ist nicht definiert ist, und das extern C gar keinen einfluss hat!?
Danke Dir
-
-
@SoIntMan sagte in Ansi-c in Visual Studio2022 linker (c unresolved symbol):
ah jetzt funktioniert es, aber wie funktioniert das jetzt mit dem NameMangeling?
weil die __cplusplus ist nicht definiert ist, und das extern C gar keinen einfluss hat!?
Danke Dir
__cpluplus ist definiert wenn du mit einem c++ compiler kompilierst. Dieser nimmt dann auch Namemangling vor. C compiler definieren das Makro nicht und manglen auch nicht. Deswegen schaltest du mit extern C das Namemangling in C++ (für in c implementierte Funktionen) ab. Dann findet der Linker auch die richtigen Symbole.
-
@Tyrdal ja hast recht, ist definiert ..sorry.. ich danke dir , dann nehme ich das mangeling mal in die mangel:) flach
Schönes WE Dir und euch;)