VC++ Debug -> Release : Fehler wo vorher keine waren
-
Hallo,
kann mir einer sagen, warum ich Fehlermeldungen bekomme wenn ich, anstelle von Debug, auf Release gehe? Das bedeutet doch eigentlich nur, dass beim Kompilieren keine Debuginformationen erstellt werden, oder?
Auf jeden Fall habe ich nun folgende Fehlermeldungen auf dem Schirm:
---
V2 fatal error LNK1120: 7 unaufgeloeste externe Verweise
V2 error LNK2019: Nicht aufgeloestes externes Symbol __imp__WSAStartup@8, verwiesen in Funktion "int __cdecl startWinsock(void)" (?startWinsock@@YAHXZ)
V2 error LNK2019: Nicht aufgeloestes externes Symbol __imp__recv@16, verwiesen in Funktion _main
V2 error LNK2019: Nicht aufgeloestes externes Symbol __imp__connect@12, verwiesen in Funktion _main
V2 error LNK2019: Nicht aufgeloestes externes Symbol __imp__inet_addr@4, verwiesen in Funktion _main
V2 error LNK2019: Nicht aufgeloestes externes Symbol __imp__htons@4, verwiesen in Funktion _main
V2 error LNK2019: Nicht aufgeloestes externes Symbol __imp__WSAGetLastError@0, verwiesen in Funktion _main
V2 error LNK2019: Nicht aufgeloestes externes Symbol __imp__socket@12, verwiesen in Funktion _main
c:\Dokumente und Einstellungen\Administrator\Desktop\Wsock\V2\V2.cpp(87): warning C4244: '=' : Konvertierung von 'double' in 'float', möglicher Datenverlust
D:\Programme\Vc7\include\useoldio.h(29): warning C4995: '_OLD_IOSTREAMS_ARE_DEPRECATED': der Name, der als #pragma markiert war, wurde verworfen
---thx im Voraus
-
Nein, das bedeutet auch, daß teilweise andere Lib's benötigt werden (viele Funktionen arbeiten anders (mit zusätzlichen Kontrollstrukturen und -ausgaben), wenn sie in der Debug-Version verwendet werden). Schau mal in den Linker-Optionen nach, welche Lib's in der Release- und Debug-Version eingebunden werden.
-
Und das schaut ganz nach eiuner fehlenden Winsock lib aus.
ws2_32.lib?
-
OK! Die LIB hat tatsächlich gefehlt. Ich muss wohl für jede Komfiguration Debug, Release oder am Besten unter "alle Konfigurationen" die entsprechenden Optionen setzen bzw. LIBS einbinden. Dann funzts! THX.
Aber was mach ich jetzt noch mit diesem Warning?
---
D:\Programme\Vc7\include\useoldio.h(29): warning C4995: '_OLD_IOSTREAMS_ARE_DEPRECATED': der Name, der als #pragma markiert war, wurde verworfen
---Viele Grüße
S.
-
Du könntest in der MSDN Library unter C4995 nachsehen. Vermutlich benutzt du iostream.h.
-
Hier mal meine includes: Ich vermute es liegt an der stdio.h, weil ALT,oder?
---
#include "stdafx.h"
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#include <fstream.h>
---Wofür ist eigentlich dieses stdafx.h & stdafx.cpp?
-
_XYZ schrieb:
Hier mal meine includes: Ich vermute es liegt an der stdio.h, weil ALT,oder?
Nein, vermutlich an fstream.h. stdio.h ist aber auch alt, zumindest für C++.
#include "stdafx.h"
#include <windows.h>
#include <winsock2.h>
#include <cstdio>
#include <cstdlib>
#include <fstream>Wofür ist eigentlich dieses stdafx.h & stdafx.cpp?
Vorkompilierte Header.
-
Kann die Header so nicht einbinden, da er sie sonst nicht kennt. Brauche ich nicht dann so etwas wie:
using namespace std;
???
Für was sind vorkompilierte Header gut? Bzw. welche Prototypen stehen in stdafx.h??
-
_xyz schrieb:
Kann die Header so nicht einbinden, da er sie sonst nicht kennt. Brauche ich nicht dann so etwas wie:
using namespace std;
Richtig erkannt, genau das brauchst du (alternativ "using std::fstream;using std::ifstream;...")
Für was sind vorkompilierte Header gut? Bzw. welche Prototypen stehen in stdafx.h??
Die beschleunigen die Compilation, weil sie nicht bei jedem Rebuild neu untersucht werden müssen - meist werden dort die für die WinAPI nötigen Header reingestellt (aber das ist letztlich deine Entscheidung, per Default wird stdafx.h/stdafx.cpp leer erzeugt.
-
Leider kommt folgende Fehlermeldung:
----
...\Wsock\V2\V2.cpp(17): error C2871: 'std' : Es ist kein Namespace mit diesem Namen vorhanden.
---???
WinAPI - Windows Appl. Interface: Eine Programmierschnittstelle zum Win-Betriebsystem? Muss ich verwenden wenn ich auf Windows Daten zugreifen will?
-
_xyz schrieb:
...\Wsock\V2\V2.cpp(17): error C2871: 'std' : Es ist kein Namespace mit diesem Namen vorhanden.
Die Using-Direktive muss hinter den Includedirektiven für die Standardheader stehen.
WinAPI ... Muss ich verwenden wenn ich auf Windows Daten zugreifen will?
Nein, die musst du verwenden, wenn du auf Windows-Funktionen zugreifen willst.
-
So habe ichs gemacht:
---
#include "stdafx.h"
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#include <fstream.h>using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{...}Und so gehts leider nicht.
Zitat:
Nein, die musst du verwenden, wenn du auf Windows-Funktionen zugreifen willst.
Was meinst Du mit Windows-Funktionen? Gib mir mal ein Beispiel
-
Falsche Header - die heißen <cstdio>, <cstdlib> und <fstream> (alle ohne das .h am Ende).
PS: Windows-Funktionen ist z.B. alles, um die schönen Dialogfenster darzustellen - das kannst du entweder auf dem harten Weg machen (Direktaufruf der passenden WinAPI-Funktionen) oder dir mit dem VS eine MFC-Anwendung zusammenschustern.
-
Alles Klar! Vielen Dank!
Ist die Wahl der Headerdateien abhängig vom Compiler? Wenn ich das Ganze nun mit VC++ 6.0 anstatt mit VC++2005 Compiliere, läuft das dann immer noch so einwandfrei? So wie ich Bill kenne wahrscheinlich nicht, oder?
PS: Windows-Funktionen ist z.B. alles, um die schönen Dialogfenster darzustellen ...
D.h.,wenn ich mit der MFC und dem VC++ Assistent ein Dialogfenster erschaffe, dann wird automatisch die Datei stdafx.h + stdafx.cpp mit Code zugemüllt. Richtig?
-
_XYZ schrieb:
Alles Klar! Vielen Dank!
Ist die Wahl der Headerdateien abhängig vom Compiler? Wenn ich das Ganze nun mit VC++ 6.0 anstatt mit VC++2005 Compiliere, läuft das dann immer noch so einwandfrei? So wie ich Bill kenne wahrscheinlich nicht, oder?
Soweit es die Standard-Header von C++ betrifft, die MÜSSEN immer in der .h-freien Version verfügbar sein (sonst darf sich dein Compiler nicht ANSI-konform nennen) - bei eigenen Headern ist der Hersteller da flexibler.
-
_XYZ schrieb:
Wenn ich das Ganze nun mit VC++ 6.0 anstatt mit VC++2005 Compiliere, läuft das dann immer noch so einwandfrei? So wie ich Bill kenne wahrscheinlich nicht, oder?
Das hat weniger mit Bill als mit dem Alter dieses Compilers zu tun. VC6 ist älter als der C++-Standard. Soweit ich weiß, funktionieren die Header ohne .h aber.