Jammer-Thread

Hier kann über allgemeine Themen diskutiert werden, die sonst in kein Forum passen.
Insbesondere über Szene, Games, Kultur, Weltgeschehen, Persönliches, Recht, Hard- und Software.
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: Jammer-Thread

Beitrag von kimmi »

Projekt-Anträge schreiben ist laaangweilig!
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

kimmi hat geschrieben:Projekt-Anträge schreiben ist laaangweilig!
… für welche Art von Projekte? Für Förderanträge?
Egal, alle Arten! Die nehmen sich nicht viel!
Dateianhänge
dot.png
dot.png (1.87 KiB) 4555 mal betrachtet
Zuletzt geändert von kimmi am 12.02.2018, 16:14, insgesamt 1-mal geändert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Jammer-Thread

Beitrag von Chromanoid »

Krishty hat geschrieben:Ich weiß seit gerade, dass es eine ganz schlechte Idee ist – ich lese z.B. das hier bei fefe als mining.plot statt als mining plot:
Ja, und ich sehe überall kurz scheiß zwei Links aufblitzen :(.

Die haben wohl die neue CSS-Property text-decoration-skip-ink eingeführt und gleich das offizielle Standard-Verhalten auto eingestellt. Siehe auch https://developer.mozilla.org/en-US/doc ... n-skip-ink

Bei Überschriften mag das besser aussehen, sofern man da Underlining verwendet, aber eben nicht immer. Bei Links ist das aus meiner Sicht aber typographischer Unsinn. Da will man sehen, dass etwas ein interaktives Element ist und was alles zu diesem Element gehört. Die Aussetzer verhindern, dass man das genau erkennen kann.

Ich könnte mir vorstellen, dass das bei anderen Zeichensystemen vielleicht besser kommt, aber bei lateinischen Buchstaben, finde ich das nicht als Default sinnvoll. Jedenfalls nicht bei den ganzen Links, die auf den meisten Seiten ja unterstrichen werden.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Jammer-Thread

Beitrag von Chromanoid »

Apropos gerade gesehen: https://chrome.google.com/webstore/deta ... oebgfhlldh
This extension restores the underlining behavior of previous Chrome versions (text-decoration-skip-ink: none).
Lol

Boah haben die es verkackt: https://groups.google.com/a/chromium.or ... AC_xpwBgAJ
What we see after shipping it as a default: A lot of positive signals from users and the typographic community, and a set of positive reactions from colleagues to this change.
Die hören auf ein paar Typophile, die sich an dem Feature aufgeilen, und vergessen dabei, wie sie das wichtigste Element im Internet - den Hyperlink - verkacken.
But what we also see learned after shipping as a default: Particularly with the default monospace and sans-serif font on Linux, as many of us experience when using crbug.com or Chromium code review, underlines for URLs or code are less than optimal with the new default (784493):
We're addressing this in this CL by exempting slash, backslash and underscore from ink-skipping, as we do for CJK. Since this is not an intrusive change, we can consider merging this to 65 beta or 64 stable. I agree it's unfortunate that this was captured late in the process. We will strongly consider a staged rollout or using an experiment for a change of this significance next time.
Da hat sich wohl jemand sehr für ein Feature eingesetzt und will jetzt nicht eingestehen, dass das ein Fehler war....
https://bugs.chromium.org/p/chromium/is ... ?id=808603, text-decoration-skip-ink + underline dotted = spurious skips
https://bugs.chromium.org/p/chromium/is ... ?id=807343, Dotted underline broken on Chrome due to `text-decoration-skip-ink`
https://bugs.chromium.org/p/chromium/is ... ?id=806553, squiggly red underline that appears under misspelled words should not overlap lower case q,y,p,g and j (Note comment #4, which may or may not indicate users reporting issues)
https://bugs.chromium.org/p/chromium/is ... ?id=796381, Letters with descenders break URL underline on mobile (Not a bug, but unexpected behavior that has appeared in other bugs)
https://bugs.chromium.org/p/chromium/is ... ?id=793762, For Hangul, Underlines drawn with 'text-decoration: underline solid' are broken at some font sizes or under some characters (Fixed, but some comments are complaining about residual issues)
https://bugs.chromium.org/p/chromium/is ... ?id=784493, underscores in links are broken with text-decoration-skip-ink: auto
https://bugs.chromium.org/p/chromium/is ... ?id=782561, Underline breaks while typing letters like 'y','q','j','p' in "Gmail" app. (Our own test team didn't know about the change)
https://bugs.chromium.org/p/chromium/is ... ?id=782131, Regression: Underline is not seen proper for 'play' thumbnail (Not broken, expected, but for a word like "Play" our implementation is sub-optimal, confusing a little bit of underline after the "y" for a period.)

Looking at this, my primary complaint is that it was enabled by default while the implementation had a lot of user-facing issues. There were no tests for dotted or dashed underlines that I can see from the code review, nor significant testing across fonts. I understand that this is essentially impossible to test comprehensively, but all the more reason to roll out slowly.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Fuck. Ich kenne die Art Menschen, die solche „Features“ um jeden Preis reindrückt. Ich kenne es auch, wie sie das Zeug nicht testen und alle Beschwerden beiseite wischen, weil sie nur auf ihren eigenen Anwendungsfall fixiert sind.

Und seit dem Debakel mit Backspace-bedeutet-Zurück habe ich auch keine Hoffnung, dass es je wieder rausgenommen wird. Also … mein selbstgeschriebener Browser ist überfällig.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Jammer-Thread

Beitrag von Chromanoid »

Krishty hat geschrieben:Fuck. Ich kenne die Art Menschen, die solche „Features“ um jeden Preis reindrückt. Ich kenne es auch, wie sie das Zeug nicht testen und alle Beschwerden beiseite wischen, weil sie nur auf ihren eigenen Anwendungsfall fixiert sind.
Genau das habe ich auch gedacht.

Über das Feature müssen eigentlich Linguisten für jedes Schriftsystem einzeln entscheiden. Wenn ich das beim arabischen so sehe kann ich mir kaum vorstellen, dass das jetzt besser lesbar ist. Plötzlich sind überall zusätzliche diakritische Punkte und Striche.

Da hat irgendwer in einem Typographie-Buch gelesen, dass das gute Typographen so machen mit den Unterstreichungen und geglaubt, dass man das ja wunderbar automatisieren kann. Dann haben die es auch noch geschafft, dass als Default für die nächste CSS Spezifikation (noch nur als Entwurf) einzubringen m(.
joggel

Re: Jammer-Thread

Beitrag von joggel »

Ich probiere gerade ein neues Framework aus. Projekte die ich damit erstelle (kompiliere und linke) laufen einwandfrei.
Nur meckert mein Intellisense von VS2017 (VC++) andauernd, und unterstreicht Funktionen, Makros, etc die von diesem framework bereit gestellt werden. Demzufolge schlägt mir das Intellisense auch keine Funktion/Members vor, wenn ich Instanzen aus dem framework benutzen wenn ich darauf zugreifen möchte. Das nervt mich schon etwas...

Google-Suche bringt sehr sehr viele ergebnisse und bringt mich auch nicht wirklich weiter.
Ich habe auch schon die "stdafx.h" in mein projekt-source verzeichnis kopiert. (Das war auch ein Grund warum IntelliSense da rummeckerte; löst das Problem aber auch nicht komplett)
Was ich mir noch vorstellen könnte, ist das hier; letzer (5.) Punkt.

Hatte jemand das Problem schon einmal?
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Jammer-Thread

Beitrag von xq »

ich kann dir da leider auch nicht helfen, muss aber dein jammern verstärken:
Hatte jemand das Problem schon einmal?
Jain, ich hab es mittlerweile geschafft, drei IDEs mit meinem Quellcode zum Crashen zu bringen: Borland C++ Builder 10.0, Borland C++ Builder 10.2 und Visual Studio 2017 schmieren regelmäßig bei der Code Completion ab...
Hab sie in den ersten beiden mittlerweile soweit es geht auf "nur wenn ich anfordere" eingestellt, da automatische Code Completion zu gefährlich ist, um damit produktiv zu arbeiten
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Chrome hat immer „Extensions” für Google Docs & Co. mitinstalliert.

Ich habe sie jedes Mal deinstalliert.

Nun machen sie das gleiche wieder, nur nennen sie es „Apps“.

Ich will nicht, dass YouTube/Gmail im Hintergrund weiterläuft oder erweiterten Zugriff auf meinen Browser hat. Fuck this shit. Daher eine Bitte an euch:
  1. Gebt in die Adresszeile chrome://apps/ ein
  2. Rechtsklick auf jede App außer dem Web Store (den man nicht deinstallieren kann, verdammte Ficker)
  3. Remove from Chrome…
  4. Wenn ihr gefragt werdet, ob ihr das wirklich wollt, setzt den Haken bei Report Abuse
  5. Ihr werdet zur Beschwerdeseite weitergeleitet
  6. Wählt dort als Beschwerdegrund I never wanted this app and I don’t know how it was installed
  7. Teilt optional via Kommentar mit, was ihr davon haltet
  8. Füllt fünf Captchas aus, damit ihr auch genau wisst, wie wertvoll Google eure Meinung ist und damit sie euch selbst dabei noch ausnutzen können
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Goderion
Beiträge: 82
Registriert: 16.09.2012, 12:02

Re: Jammer-Thread

Beitrag von Goderion »

Ich konnte gerade in Visual Studio 2015 keine Release-Version mehr von meinen Projekt erstellen. Eine Lib konnte nicht geöffnet werden. Ok. Was? ...
Den ganzen Tag nur am Sourcecode/Dateien gearbeitet, nix am Projekt/Einstellungen etwas verändert. Ich gucke mir die .lib an, die er nicht öffnen kann und WTF... 2,14 GB (2.303.231.034 Bytes) ?!
Wieso ist die so riesig?! Für die Release-Version werden insgesamt mit allen Projekten über 7 GB erzeugt!! Was zum... ?!
Visual Studio 2015 kann die Lib wohl nicht öffnen, da der Linker ein 32Bit-Prozess ist und die vermutlich komplett laden will, was aufgrund der Größe nicht geht.
Ok... NARF... googlen wir mal.... 20 Minuten später nix zufriedenstellendes gefunden... einfachste Lösung das betroffene Projekt aufteilen... eeeh...

Gut, probieren wir Visual Studio 2017, wovon ich mir zum Glück vor ein paar Wochen eine Iso erstellt habe, da Microsoft die warum auch immer nicht mehr selber zur Verfügung stellt.
Ich habe Glück, beim Kompilieren bekomme ich zwar folgende Meldung ...

Code: Alles auswählen

3>LINK : Der 32-Bit-Linker (C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\bin\HostX86\x86\link.exe) konnte auf "D:\Engine\Release\ObjectDefinition2.lib" keine E/A für dem Arbeitsspeicher zugeordnete Dateien durchführen. Die Verknüpfung wird mit einem 64-Bit-Linker neu gestartet, um einen besseren Durchsatz zu erzielen.
3>LINK : In %PATH% konnte kein 64-Bit-Linker gefunden werden. Die aktuelle Verknüpfung wird fortgesetzt.
3>Code wird generiert.
... aber die fertig .exe funktioniert einwandfrei.

Jetzt weiß ich auch, warum das Kompilieren so Ewigkeiten dauert. Wenn ich das richtig verstanden habe, versucht er in der .lib alle erdenklichen Situationen zu integrieren mit einem Haufen zusätzlicher Infos, damit sich der Linker nur das raus ziehen kann, was er wirklich braucht. Fast 4 GB .lib-Files und die .exe ist am Ende gerade mal 3 MB groß. Jemand eine Idee, wie ich das optimieren kann.
Das Grundproblem verstehe ich ja, die .lib weiß zu ihrer Erstellung nicht, was wirklich gebraucht wird und packt einfach ALLES rein. Die .lib brauche ich eigentlich nicht, bzw. wird nur in dieser einen Projektgruppe genutzt. Rein praktisch könnte ich alles in ein Projekt packen, aber das wäre zu unübersichtlich und daher habe ich das auf verschiedene Projekte verteilt. Natürlich auch für bessere Kompilierzeiten, eigentlich.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Jammer-Thread

Beitrag von dot »

Goderion hat geschrieben:IJemand eine Idee, wie ich das optimieren kann.
Was ist denn in dieser .lib alles drin? xD
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Schrompf »

Könnte man abspalten, aber:

es gibt sicher auch für Visual Studio eine Variante von objdump. Damit kannst Du nachschauen, welche Symbole in Deiner Lib exportiert werden. Da ich es für unmöglich halte, mit handgeschriebenem Code auf solche Größen zu kommen, vermute ich, dass Du irgendwie fünftausend Instanzen eines Templates indirekt exportierst oder dass Du irgendein fies großes globales Datenarray exportierst.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Goderion
Beiträge: 82
Registriert: 16.09.2012, 12:02

Re: Jammer-Thread

Beitrag von Goderion »

dot hat geschrieben:
Goderion hat geschrieben:IJemand eine Idee, wie ich das optimieren kann.
Was ist denn in dieser .lib alles drin? xD
In der .lib befinden sich die Definitionen/Strukturen für die Objekte, Komponenten, Level, usw..
Schrompf hat geschrieben:Könnte man abspalten, aber:

es gibt sicher auch für Visual Studio eine Variante von objdump. Damit kannst Du nachschauen, welche Symbole in Deiner Lib exportiert werden. Da ich es für unmöglich halte, mit handgeschriebenem Code auf solche Größen zu kommen, vermute ich, dass Du irgendwie fünftausend Instanzen eines Templates indirekt exportierst oder dass Du irgendein fies großes globales Datenarray exportierst.
Ich habe in den letzten Tagen/Wochen das Objektsystem stark verändert und viele Klassen/Strukturen basieren jetzt auf Templates (erben von Templates). Ich konnte dadurch die Entwicklung/Programmierung neuer Klassen stark beschleunigen und sogar ein wenig die Performance steigern (stark VTables reduziert, kaum noch virtual Delete(), usw.). Je mehr ich auf Templates umgestellt habe, desto langsamer wurde auch das Kompilieren, besonders im Release-Mode.

Auf jeden Fall komplett Banane. Ich habe hier eine Klasse, die von einem Template erbt, die Klasse hat keine 2 Seiten Quellcode (.h + .cpp), aber die .obj-File ist 17 MB groß. Ich suche gerade nach einer Möglichkeit zu gucken, was da alles drin sein soll.
Benutzeravatar
xq
Establishment
Beiträge: 1581
Registriert: 07.10.2012, 14:56
Alter Benutzername: MasterQ32
Echter Name: Felix Queißner
Wohnort: Stuttgart & Region
Kontaktdaten:

Re: Jammer-Thread

Beitrag von xq »

Mal nen Schuss ins Blaue: Hast du inkrementelles Linken an? Wenn ja: Mach mal aus, mach nen Rebuild und guck, was dabei rauskommt...
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Benutzeravatar
Goderion
Beiträge: 82
Registriert: 16.09.2012, 12:02

Re: Jammer-Thread

Beitrag von Goderion »

Ich habe das Projekt mit der riesigen .lib in Mehrere aufgeteilt, und jetzt läuft alles wieder auch in Visual Studio 2015.

Visual Studio hat das Tool dumpbin.exe mit dabei, damit kann ich mir die Symbole usw. von .libs angucken. Selbst mit einer "kleineren" .lib von 700 MB explodiert die Konsole, Ewigkeiten wird etwas ausgegeben. 11934 public symbols werden angezeigt. Templates ohne Ende. Sieht aus, als würde jeder Furz in allen Variationen erstellt worden.

Ich kompiliere im Release-Mode immer mit /GL - Optimierung des gesamten Programms. Wenn ich das ausschalte, schrumpfen die .libs von 7 GB auf ca. 500 MB.

Ich werde aber wohl auf Visual Studio 2017 umsteigen, da die Release-Version leicht schneller ist (von 335 FPS auf 350 FPS).
Am Anfang bekam ich gelegentlich komische Fehler, z.B. musste ich zwei mal das Plattformtoolset "Visual Studio 2017 - Windows XP (v141_xp)" installieren und hin und wieder ist es wieder weg und erst nach einem Neustart von Visual Studio 2017 wieder da... he? :? (VS 2017 bereits aktualisiert)
MasterQ32 hat geschrieben:Mal nen Schuss ins Blaue: Hast du inkrementelles Linken an? Wenn ja: Mach mal aus, mach nen Rebuild und guck, was dabei rauskommt...
Statische Bibliotheken (.lib) haben in Visual Studio 2015/2017 keine Linker Einstellungen. Nur das Hauptprojekt in der Projektgruppe, welches die .exe erstellt, hat diese Einstellungen und dort ist inkrementelles Linken bereits deaktiviert.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

d3d9.dll!CD3DDDIDX8::UpdateDirtyStreams()
Entweder stottern die DirectX-Entwickler, oder sie stehen auf dicke Titten.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Media Player Classic, der mit Abstand beste Player, ist tief im Ansehen gesunken weil er bei Crashes automatisch Dr. Dump kontaktiert: https://trac.mpc-hc.org/ticket/5450

Command Line ist Nonsens. Wenn ich auf eine Datei doppelklicke, kann ich keinen Parameter übergeben. Da müsste ich in die Registry und an die 100 ProgIDs ändern.

CrashReporter-Verzeichnis löschen ist schön und gut, wenn man weiß, dass sowas verbaut ist.

Eine Setup-Option wäre das Minimum.

Oh, und: man kann bei Dr Dump keine Kommentare hinterlassen, ohne sich zu registrieren. Ich weiß, warum der MPC abgestürzt ist (ich hatte die D3D Debug Runtime eingeschaltet, und die hat beim Schließen ein harmloses Speicherleck gemeldet), aber ich kann’s nicht mitteilen. Eigentlich gut so: Wer meine Crash Dumps klaut, hat es auch verdient, Lebenszeit sinnlos damit zu verschwenden. Eigentlich sollte ich den jetzt noch 100 weitere Male abstürzen lassen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Jammer-Thread

Beitrag von Chromanoid »

Nachtrag zu Chrome und Unterstreichungen: Ich glaube ich war da mit meinen Anschuldigungen etwas voreilig :) Verschiedene W3C-Gremien haben sich da schon länger Gedanken drüber gemacht. Es ist einfach Zufall, dass das erst jetzt bei Chrome eingeführt wurde... Naja, ich halte es weiterhin für problematisch und war mit dem alten Aussehen zufriedener.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Bei Visual C++ kollidieren die temporären Dateien, wenn man sowohl foo.cpp als auch foo.c im Projekt hat.

> 2018
> Programme, die auf richtige Dateierweiterungen vertrauen
> idontwanttoliveonthisplanetanymore.mov
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
kaiserludi
Establishment
Beiträge: 467
Registriert: 18.04.2002, 15:31

Re: Jammer-Thread

Beitrag von kaiserludi »

Also ich habe sogar mehrere .cpp Dateien mit komplett identischem Dateinamen in der Solution und das hat noch keiner IDE Probleme bereitet, auch nicht VS, allerdings liegen die Dateien in unterschiedlichen Projekten, die zu unterschiedlichen statischen Bibliotheken kompilieren, welche aber wiederum durchaus am Ende zur gleichen .exe gelinkt werden.
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da
:)

"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
Benutzeravatar
B.G.Michi
Establishment
Beiträge: 163
Registriert: 07.03.2006, 20:38
Alter Benutzername: B.G.Michi
Kontaktdaten:

Re: Jammer-Thread

Beitrag von B.G.Michi »

QtCreator und qmake vertragen das auch nicht... -.-'
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

1. extern "C" unterdrückt Name Mangling.

Geil! Ich kann endlich auf die exports.def in meinem Projekt verzichten!

(später) Irgendwas stimmt mit der 32-Bit-Version nicht …

2. extern "C" unterdrückt Name Mangling, so lange die Calling Convention nicht __stdcall ist.

WTF, das hat aber doch hier funktioniert?! Sogar mit __stdcall, da bin ich mir sicher!

3. extern "C" unterdrückt Name Mangling, so lange die Calling Convention nicht __stdcall ist, oder sofern die Calling Convention __stdcall ist und Debug-Information abgeschaltet ist.

IST DAS HIER VERSTECKTE KAMERA ODER WAS
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Jammer-Thread

Beitrag von dot »

Dass extern "C" irgendwas mit Name Mangling zu tun hätte, ist leider ein weit verbreiteter Irrtum. extern "C" ist eine linkage-specification, die besagt, dass die jeweils deklarierte Entität C language linkage haben soll. Effektiv heißt das einfach, dass sie entsprechend dem C ABI der jeweiligen Plattform übersetzt werden soll. Auf Windows gibt's wegen der ganzen verschiedenen Calling Conventions auch in der C ABI Name Mangling...
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

dot hat geschrieben:Dass extern "C" irgendwas mit Name Mangling zu tun hätte, ist leider ein weit verbreiteter Irrtum.
Nein ist es nicht. Es mag nicht dafür spezifiziert sein, aber auf Windows und mit Ausnahme der __stdcall-Extraregelung tut es unter anderem genau das.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Jammer-Thread

Beitrag von dot »

Krishty hat geschrieben:
dot hat geschrieben:Dass extern "C" irgendwas mit Name Mangling zu tun hätte, ist leider ein weit verbreiteter Irrtum.
Nein ist es nicht. Es mag nicht dafür spezifiziert sein, aber auf Windows und mit Ausnahme der __stdcall-Extraregelung tut es unter anderem genau das.
Es gibt keine "__stdcall-Extraregelung". Auf 32-Bit Windows hast du auch mit extern "C" immer Name Mangling (siehe vorhin verlinkter MSDN Artikel). Auf 64-Bit Windows gibt es in der C ABI kein Name Mangling weil es dort nur eine Calling Convention gibt (von __vectorcall mal abgesehen)...

Code: Alles auswählen

extern "C"
{
	void f() {}

	void __cdecl a() {}

	void __stdcall b() {}

	void __fastcall c() {}

	void __vectorcall d() {}
}
dumpbin /symbols bla.obj

Code: Alles auswählen

029 00000000 SECTA  notype ()    External     | _f
02A 00000000 SECT6  notype ()    External     | _a
02B 00000000 SECT8  notype ()    External     | _b@0
02C 00000000 SECT4  notype ()    External     | @c@0
02D 00000000 SECTC  notype ()    External     | d@@0
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Verdammt; ich vergaß, dass wir hier über exportierte Funktionen sprechen. Das konntest du nicht wissen, ja. Tut mir leid.

Also, einigen wir uns auf: Es unterdrückt das Name Mangling bei __cdecl. In einer DLL kommen deine Funktionen als f, a, _b@0, @c@0, d@@0 an.

Übrigens fügt dumpbin Dekoration hinzu. Die Unterstriche in _f und _a in deinem Dump existieren nicht wirklich. Das ist kein Witz, sondern Raymond Chen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Jammer-Thread

Beitrag von dot »

Krishty hat geschrieben:Also, einigen wir uns auf: Es unterdrückt das Name Mangling bei __cdecl. In einer DLL kommen deine Funktionen als f, a, _b@0, @c@0, d@@0 an.
Ich bin dem Ganzen jetzt mal genauer nachgegangen und ich würde sagen: Was wirklich passiert ist, dass der Linker für per /EXPORT angegebene C ABI Symbole den undekorierten Namen als Name für den Export verwendet. Die Symbole selbst haben aber immer einen mangled Name!

Testcode:

Code: Alles auswählen

__declspec(dllexport) int x;

__declspec(dllexport) void __cdecl f() {}

extern "C"
{
	__declspec(dllexport) int y;

	__declspec(dllexport) void __cdecl a() {}

	__declspec(dllexport) void __stdcall b() {}

	__declspec(dllexport) void __fastcall c() {}

	__declspec(dllexport) void __vectorcall d() {}
}
Krishty hat geschrieben:Übrigens fügt dumpbin Dekoration hinzu. Die Unterstriche in _f und _a in deinem Dump existieren nicht wirklich. Das ist kein Witz, sondern Raymond Chen.
Nope. Wenn nicht auch noch sämtliche File Editoren und/oder File System Driver oder so kollektiv an der Verschwörung beteiligt sind, dann sind die Underscores definitiv in der Symboltable des vom Compiler ausgespuckten Object File enthalten (egal ob dllexport oder nicht):
Untitled.png
Erst wenn ich dieses Object File zu einer DLL linke, werden für die Exports dann andere Namen verwendet. Aus dem Compiler aber kommen der C Linkage entsprechend mangled Names raus (im Release nur mit /GL- sichtbar da sonst keine COFF Symbole vom Compiler generiert werden). Erst der Linker entscheidet sich offenbar, für bestimmte Symbole den unmangled Name in die Export Table einzutragen.

Der Output von link /dump /exports (und auch dumpbin /exports, was offenbar das gleiche zu sein scheint) sieht mittlerweile übrigens so aus:

Code: Alles auswählen

          1    0 00011136 ?f@@YAXXZ = @ILT+305(?f@@YAXXZ)
          2    1 00018138 ?x@@3HA = ?x@@3HA (int x)
          3    2 000110FF @c@0 = @ILT+250(@c@0)
          5    3 000110E1 _b@0 = @ILT+220(_b@0)
          4    4 0001102D a = @ILT+40(_a)
          7    5 00011069 d@@0 = @ILT+100(d@@0)
          6    6 0001813C y = _y
Da wird mittlerweile also nicht mehr "geschummelt" sondern einfach das Mapping von Export auf Symbol angezeigt :). Wenn man die .pdb Files löscht, dann zeigt es die originalen Symbolnamen in der Tat nicht mehr an.

__declspec(dllexport) tut effektiv nix anderes als ein entsprechendes /EXPORT Argument in die Linker Commandline zu packen:
Untitled2.png
Zusammengefasst würde ich sagen, dass es bei meiner ursprünglichen Aussage bleibt: extern "C" schaltet nicht das Name Mangling ab sondern übersetzt lediglich nach C ABI statt nach C++ ABI (hab das Ganze auch noch ohne extern "C" direkt mit dem C Compiler getestet, dort ist das Verhalten exakt das gleiche). Was es gibt ist eine Extraregelung für den Export von C ABI __cdecl Funktionen im Linker. Das ist dann aber effektiv aber auch genau so dokumentiert: https://docs.microsoft.com/en-gb/cpp/cp ... -dllimport
MSDN hat geschrieben:No name decoration is applied to exported C functions or C++ extern "C" functions using the __cdecl calling convention.
Zuletzt geändert von dot am 18.02.2018, 21:19, insgesamt 1-mal geändert.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Alles klar; danke dafür! Hast du noch eine Erklärung, warum bei Exporten das Mangling verschwindet, wenn Debug-Informationen abgeschaltet sind?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Jammer-Thread

Beitrag von dot »

Sicher dass das nur an den Debug Infos liegt? Wenn du Release mit Whole Program Optimization baust, dann enthalten Object Files keinen Maschinencode und keine COFF Symbole, weil die Code Generation ja in den Linker verschoben wird...
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Jammer-Thread

Beitrag von Krishty »

Ah, der Wind weht anders. In dem StackOverflow-Thread hatte sich jemand beschwert, dass er mit dumpbin immer nur dekorierte Namen in seiner DLL sieht. Abschalten der Debug-Informationen bewirkt ein Löschen der PDB, und dann zeigt dumpbin die undekorierten Exporte, weil es keine PDB mehr findet.

Es ging da also die ganze Zeit nur um dumpbin, nicht um die tatsächlich exportierten Funktionen …
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten