Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

24.06.2010, 12:26

VisualC++: Viele Fehler in System Dateien

Hallo,
endlich wage ich mich mal richtig an VisualC++ und das dazu gehörige VisualStudio. Ich habe Visual Studio 2008 Express Edition und ich hoffe ihr könnt mir ein wenig dabei helfen, die ganzen Compiler Fehler aus den System Dateien in den Griff zu bekommen. Bei einigen Fehlern aus der OpenGL Datei (gl.h) hat es gereicht ein "#include <windows.h>" vor dem "#include <GL/gl.h>" zu schreiben. Vielleicht geht es bei manchen anderen Problemen ähnlich.
Zu Beginn waren es erst mal über 1000 Fehler meldungen vom Compiler xD. In zwischen konnte ich es schon mal auf ca. 650 reduzieren. Aber wie so oft, kann schon ein einziges Problem viele Compiler-Fehler verursachen.

Hier habe ich mal ein paar der Fehlermeldungen aufgelistet:
  • 1.
    C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock2.h(1649) : error C2375: 'getsockname': Neudefinition; unterschiedliche Bindung
    C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock.h(762): Siehe Deklaration von 'getsockname'

  • 2.
    C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\ws2def.h(206) : error C2011: 'sockaddr': 'struct' Typneudefinition
    C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock.h(485): Siehe Deklaration von 'sockaddr'

  • 3.
    C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\ws2tcpip.h(778 ) : error C2065: 'SourceList': nichtdeklarierter Bezeichner

  • 4.
    C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock2.h(2145) : error C2375: 'WSAStartup': Neudefinition; unterschiedliche Bindung
    C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winsock.h(868 ): Siehe Deklaration von 'WSAStartup'

  • 5. (ist nur ne Warnung, aber trotzdem besser, wenn's richtig funktioniert ^^)
    D:\Anwendungen\Microsoft Visual Studio 9.0\VC\include\xlocale(342) : warning C4530: C++-Handler verwendet, aber Entladesemantik ist nicht aktiviert. Geben Sie /EHsc an.

  • 6. (das ist jetzt ein Problem wegen "inline" Funktionen aus meiner eigenen Datei - da versteh ich aber nicht warum nach einem "inline" ein "(" kommen soll?!)
    error C2054: Nach 'inline' muss '(' folgen

  • 7. Wo bekomme ich "glext.h" für VisualC++ her? Kann ich da die selbe Datei nehmen wie die für GCC?
Das sollte erst mal reichen ^^.

Ich hoffe ihr könnt mir zu einigen Problemen helfen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LukasBanana« (24.06.2010, 12:50)


Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

2

24.06.2010, 13:18

Zitat von »"C-Worker: Winsock Tutorial (1)"«

Hinweise

Falls beim kompilieren einige "Neudefinition" Fehler kommen entfernt die "#include <winsock2.h>" Zeile (wurde in diesem Fall schon in windows.h includiert)
Manche Leute berichten auch, dass Sie den Fehler beheben können indem sie winsock2.h vor windows.h includieren.


http://www.c-worker.ch/tuts/wstut_op.php

Tobiking

1x Rätselkönig

  • Private Nachricht senden

3

24.06.2010, 13:30

Zu 7)
Die glext.h und andere OpenGL Header gibt es auf der OpenGL Seite: http://www.opengl.org/registry/#headers. Die sind auch recht einfach gestrickt und sollten daher weitesgehend Compilerunabhängig sein. Der Header alleine hilft dir aber nicht, da die OpenGL Lib unter Windows die Funktionen nicht direkt anbietet, und du alle nicht enthaltenen Funktionen per Hand holen musst. Nutzt du zur Hilfe GLEW oder ähnliches bringen die meistens ihre eigene glext.h bzw. deren Inhalt mit.

Zu 6)
Ein Beispiel wäre da nicht schlecht. Kann sein das aus irgendeinem Grund das inline nicht als Keyword erkannt wird sondern als Funktionsname, wo dann natürlich ( folgen muss.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

4

24.06.2010, 13:43

Okay, dann verwende ich einfach die aktuelle glext.h Datei die ich auch für GCC verwende. Die extensions lade ich sowieso mit "wglGetProcAddress".
Das mit dem Inline habe ich in dem Griff bekommen. Ich habe das Inline problem nur in meinen C Dateien (100% C, 0% C++). Ich hab in Google schon mal danach gesucht und gelesen, dass man bei C static inline Funktionen wohl "__inline" verwenden soll.
Daher habe ich das jetzt so gemacht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
#ifdef _MSC_VER
#    define STCINLINE static __inline
#else
#    define STCINLINE static inline
#endif

STCINLINE void MyFunction()
{
    /* Hier könnte ihre Werbung stehen xD */
}


Allerdings meckert der Compiler jetzt, dass aller Art typedefs ungültig wären oder so was. Ich hab den Teil jetzt erst mal mit "#ifdef COMPILE_WITH_THISPART" aus geklammert (bzw. aus ge-makrot ^^).

Das mit dem Netzwerk habe ich auch erst mal ausgeklammert - weil ich das im Moment nicht zwingend brauche - und jetzt bin ich schon nur noch bei 29 Fehlern :D das kling schon besser.

Tobiking

1x Rätselkönig

  • Private Nachricht senden

5

24.06.2010, 13:51

Kann Visual Studio vielleicht gar kein inline bei C? Das gibt es offiziell ja erst ab C99 und Visual Studio unterstützt kein C99. Mal davon abgesehen das der Compiler eh selber entscheidet was geinlined wird und was nicht.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

6

24.06.2010, 13:56

Mal ne Frage zwischendurch zu VisualStudio: wo kann ich einstellen welche Include verzeichnisse er durchsuchen soll, aber global also nicht bei Projekt Eigenschaften, weil ich habe mein DirectX SDK in einem Verzeichnis, das bestimmt keiner von euch hat. Also will ich das so machen, dass das für jedes Projekt immer bereit steht.
Also wo kann ich "DirectX SDK/Include/" hinzufügen?

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

7

24.06.2010, 14:19

Ich hab jetzt keinen anderen Weg gefunden, als über die Projekt Eigenschaften.
Nur noch 21 Fehler =)
"jpeglib.h", "png.h" und "zlib.h" findet er noch nicht. Kann ich da auch die GCC Variante nehmen? Die sollten ja eigentlich auch für alle Compiler gehen oder?

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

8

24.06.2010, 14:32

Nur noch einen Fehler :D
Ich hab jpeglib.h und ein paar andere JPEG header von GCC nach VC kopiert. Er findet aber "iostream.h" nicht. "<iostream>" geht aber mit dem ".h" als C Datei wohl nicht.
Wo bekomme ich die für VC++ her?

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

9

24.06.2010, 14:51

Folgende Linker Fehler treten jetzt auf:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
png.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_crc32" in Funktion "_png_reset_crc".
png.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_inflateReset" in Funktion "_png_reset_zstream".
pngpread.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_inflateReset".
pngrutil.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_inflateReset".
pngpread.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_inflate" in Funktion "_png_process_IDAT_data".
pngread.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_inflate".
pngrutil.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_inflate".
pngread.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_inflateInit_" in Funktion "_png_create_read_struct_2".
pngread.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_inflateEnd" in Funktion "_png_read_destroy".
pngwrite.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_deflate" in Funktion "_png_write_flush".
pngwutil.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_deflate".
pngwrite.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_deflateEnd" in Funktion "_png_write_destroy".
pngwutil.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_deflateInit2_" in Funktion "_png_write_IHDR".
pngwutil.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_deflateReset" in Funktion "_png_write_compressed_data_out".


Welche *.lib Datei brauche ich dafür??

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

10

24.06.2010, 14:53

Muss das nicht #include <iostream.h> heißen und nicht #include "iostream.h"?

Sonst einfach suchen und in das Projektverzeichnis kopieren (zwar nicht elegant, funktioniert aber).

EDIT:
Der Fehler wurde wohl schon behoben. Du wirst wohl die .lib linken müssen, die bei deiner JPEGlib dabei waren.

Werbeanzeige