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

Nimelrian

Alter Hase

  • »Nimelrian« ist der Autor dieses Themas

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

1

07.05.2015, 11:57

Third Party Code kompiliert in Visual Studio nicht. Was nun?

Hey zusammen.

Folgende Situation:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
// Defines the effect of a particle
class ParticleEffect {
    float lifeTime;
    float scaleStart;
    float scaleMax;
    float scaleChangePerSecond;

    EffectConfiguration configuration;

    const Texture*  effectTexture;
    sf::Color       color;
};


Das ist eine Klasse, die ich bei mir verwende. Um Hard-Coding zu vermeiden, würde ich gerne in der Lage sein, Instanzen dieser Klasse in JSON zu serialisieren/deserialisieren.
Dafür gibt es eine hübsche moderne Single-Header Lösung, die ich gerne verwenden würde.

Ich habe vor der Verwendung dann mal in die Issues geschaut und dabei dann diesen entdeckt: Windows/Visual Studio (through 2013) is unsupported

Da ich mit VS2013 arbeite ist das natürlich... doof.

Jetzt habe ich eigentlich nur folgende Optionen:
  1. Auf eine andere Library ausweichen (Möchte ich aber egtl. nicht, die anderen die ich finde, sind nicht so gut gewartet und teilweise unintuitiver)
  2. Auf einen anderen Compiler umsteigen
Das Umsteigen auf einen anderen Compiler käme mir sowieso recht, wenn ich irgendwann das ganze mal auf Linux porten will. So kann ich mich schonmal mit der neuen Toolchain vertraut machen. Dazu kommt noch, dass Microsoft leider immer noch mit der Unterstützung von C++11 (geschweige C++14) Features hinterherhinkt.
Als Compiler stünden nun gcc/g++ und Clang im Raum. Hier würde ich Clang bevorzugen. Kann ich VS mitteilen, Clang als Compiler zu verwenden? Wenn ja, kann ich dann immer noch wie gewohnt in VS debuggen (Clang dürfte ja denke ich andere Libraries beim Linken benutzen)?
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Nimelrian« (07.05.2015, 12:02)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

07.05.2015, 12:29

Kann ich VS mitteilen, Clang als Compiler zu verwenden? Wenn ja, kann ich dann immer noch wie gewohnt in VS debuggen (Clang dürfte ja denke ich andere Libraries beim Linken benutzen)?

Ja. https://www.google.de/#q=clang+in+visual+studio

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

3

07.05.2015, 12:37

Nein, siehe ZFX-Diskussion dazu. Quintessenz: CLANG ist noch nicht so weit, produktiv unter Visual Studio eingesetzt zu werden. So Sachen wie Exception Handling knallen immernoch böse. Das soll dann demnächst werden, schrieb Microsoft jüngst, aber eh das produktiv einsetzbar wird, ist noch ein bisschen abzuwarten, fürchte ich.

Und das hat nichts damit zu tun, dass ich gerade meinen eigenen kleinen Krieg mit CLang austrage :-)
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

07.05.2015, 12:41

Als ich für Helmuts Blobby Volley-Contest Clang unter Visual Studio benutzt habe, hat das eigentlich ganz gut funktioniert. Aber gut, das war ja auch nur ein Miniprojekt.

Nimelrian

Alter Hase

  • »Nimelrian« ist der Autor dieses Themas

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

5

07.05.2015, 12:49

Kann ich VS mitteilen, Clang als Compiler zu verwenden? Wenn ja, kann ich dann immer noch wie gewohnt in VS debuggen (Clang dürfte ja denke ich andere Libraries beim Linken benutzen)?

Ja. https://www.google.de/#q=clang+in+visual+studio

Naja, auf der LLVM Seite steht dann aber auch sowas:

Zitat

Clang mostly works on Windows, but does not currently understand all of the Microsoft extensions to C and C++. Because of this, clang cannot parse the C++ standard library included with Visual Studio, nor parts of the Windows Platform SDK. However, most standard C programs do compile.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

6

07.05.2015, 13:11

Es gibt für den produktiven Einsatz in der Tat noch kleinere Probleme.
Allerdings sind sie gut im Rennen, auch bezüglich seltsamer Microsoft Extensions.
http://clang.llvm.org/docs/MSVCCompatibility.html

Experimentell konnte ich bereits Windows Header und STL kompilieren.

feider

Frischling

Beiträge: 8

Wohnort: Jena

Beruf: Student

  • Private Nachricht senden

7

07.05.2015, 13:14

Hi,
wenn deine json-Lösung nicht mit VS funktioniert, probiere doch mal JsonCpp. Ist zwar nicht ganz Single-Header, kann aber zumindest zu einer einzelnen sourcefile mit immer noch einfach einzubindenden Headern zusammengeschrumpft werden. Ich habe das mal mit großer Zufriedenheit genutzt.

Grüße
feider

Evrey

Treue Seele

Beiträge: 245

Beruf: Weltherrscher

  • Private Nachricht senden

8

07.05.2015, 14:24

Je nachdem, wie gut man in Visual Studio externe Toolchains einbinden kann, würde ich ansonsten zu MSYS2 raten. (Wohl gemerkt Version 2, nicht 1, die ist alter, rostiger... Dings) Einfach per Pacman Clang und eventuelle andere Libs wie Boost ziehen, in den Repositories fehlende Bibliotheken flux mit der MSYS2-Shell kompillieren, und los gehts. Macht bei mir bisher keinerlei Probleme, bis auf ein Detail: Wenn du die GCC-Libs nutzen solltest und die unordered_map brauchst, dann wirst du aufgrund von Kompatiblitäts-Problemen Boost's Implementierung nutzen müssen. libc++ ist leider nicht in den Repos vorhanden und erfordert daher Handarbeit via Shell.

Paket aus dem Repo installieren:

Quellcode

1
$ pacman -S mingw-w64-x86_64-clang mingw-w64-i686-clang


Alle installierten Repo-Pakete aktualisieren:

Quellcode

1
$ pacman -Syu


Paket kompillieren und installieren (z.B. MRuby):

Quellcode

1
2
3
4
$ cd /C/path/to/my_lib/
$ ./configure --prefix=/C/path/to/MSYS2/mingw64/
$ make
$ make install
Bei 32-bit-Kompillaten natürlich in /mingw32/ installieren.

C-/C++-Quelltext

1
2
3
4
int main(int _argc, char** _argv) noexcept {
  asm volatile("lock cmpxchg8b %eax");
  return 0;
} // ::main
(Dieses kleine Biest vermochte einst x86-Prozessoren lahm zu legen.)

=> Und er blogt unter Hackish.Codes D:

Werbeanzeige