Die Verknüpfung an C-Bibliothek in ein C++ - Anwendung
Arbeite ich auf ein C/C++ - Anwendung in Visual Studio 2010. Die Lösung hat mehrere Projekte, die kompiliert werden und rollte in einer einzigen ausführbaren Datei. Ich versuche zum hinzufügen von print-Anweisungen zum Debuggen ein paar der wichtigen Funktionen.
Habe ich eine printf-Anweisung in einer Funktion, die in einem der .c-Dateien. Ich habe die Betreuung zu gehören <stdio.h>
. Die C-header enthalten ist in einer C++ - Datei irgendwo weiter oben. Ich weiß, dass es Unterschiede zwischen dem, wie die C-und C++ - linkers zu betreiben und zu extern
Kräfte Verhalten. Aber ich bin kein Experte für die Feinheiten.
Den code in der folgenden Weise:
//proc.h
#ifdef __cplusplus
extern "C" {
#endif
void do_stuff();
#ifdef __cplusplus
}
#endif
-----------------------------------------------
//proc.c
#include "proc.h"
#include <stdio.h>
void do_stuff()
{
printf("Hello from proc.c -- do_stuff()");
//Some other stuff
}
Wenn ich die Anwendung erstellen, sehe ich die folgende Fehlermeldung in VS-Ausgabefenster:
[proj path]\common.lib(proc.obj) : error LNK2019: unresolved external symbol _printf referenced in function _do_stuff@20
Ich habe auch versucht, indem die #include <stdio.h>
in der header-Datei, sondern die c-Datei. In diesem Fall habe ich erhalten:error LNK2001: unresolved external symbol printf
- Dies kann helfen: Das Projekt des Interesses(enthält die c-Dateien, mit dem ich arbeite) ist gebaut mit nmake mit einem makefile und die resultierende Datei wird verwendet .exe erstellt, indem einige der anderen Projekte, die in diese Lösung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht, mit
<cstdio>
statt<stdio.h>
?Bedeutet dies, dass Sie nicht die Verlinkung in der Umsetzung der printf-Funktion, die sich in einer lib.
Für <stdio.h> ich glaube, es ist in cstdio?
printf
ist in der standard-C-Bibliothek, die Sie nie brauchen, um es manuell hinzufügen, um den linker.Gehen Sie auf die Eigenschaften Ihres Projektes und gehen Sie auf die Linker Abschnitt. In der Input sub-section, ignorieren Sie Standard-Bibliotheken, oder haben Sie alle Bibliotheken aufgelistet, die zu ignorieren?
Die Bibliothek printf ist, hängt davon ab, wie Sie eine Verknüpfung mit der runtime (C/C++ - Abschnitt, Code-Generierung sub-Abschnitt -- Blick auf die "Runtime-Bibliothek"). Die Tabelle in diesem KB-erzählt Sie dem standard .lib zu verwenden, für jeden Wert von "Runtime Library"
http://msdn.microsoft.com/en-us/library/6wtdswk0(v=vs. 71).aspx
Herauszufinden, was Los ist, können Sie hinzufügen /VERBOSE:LIB deiner linker Linie, die wird Ihnen sagen, jeder Bibliothek sah es in (Tun Sie dies in der Befehlszeile ein Teilgebiet der Linker Abschnitt)