VS22 statische Lib erzeugen/verwenden
-
Hallo,
ja dies klappt bei mir nicht recht. Meine Vorgehensweise:- Projekt als statische Lib erzeugen
- in den Einstellungen des Projektes, welches die Lib nutzen soll, C++|General|Additional Directories -> wo der Code der Lib liegt
- wie oben, nur in Linker|General|Additional Library Directories -> wo die Lib selbst liegt
- in Linker|Input|Additional Dependencies -> der Name der Lib
- Im Projekt, welches die Lib nutzen soll, wird der
#include
des Code akzeptiert und auch Intellisense zeigt nichts an - Wenn ich nun das Projekt starte, kommt eine Latte an Fehlermeldungen wegen
global scope
undglobal namespace
"the globale scope has no acosf"
"... is not a member of global namespace"
etc
Was mache ich da verkehrt?
-
Die Fehlermeldungen beim Kompilieren (nicht beim Starten!) deuten einfach auf falschen C++ Code bzgl. der Namensbereiche hin (d.h. es hat nichts direkt mit der statischen Lib zu tun).
Überprüfe einfach der Reihe nach diese Fehlermeldungen (oder zeige sie, sowie den zugehörigen Code, wenn du nicht weiterkommst damit).
-
Es sind tausende Fehler. Gefühlt jede Funktion in zB
<cmath>
wurde als Fehler gemeldet. Wie soll ichthe global scope has no acosf
überprüfen? Damit habe ich doch gar nichts zu tun.Aber ich habe eben nochmal überprüft, vielleicht ist mir was zwischen gerutscht. Und beim Kompilieren, jetzt wieder zu einer exe, hatte ich eben die selben Fehler. Ich habe dann die oben beschriebenen Einstellungen im Projekt wieder zurückgenommen und der Code kompilierte wieder.
ich meine, ich habe in den Einstellungen im Projekt, um eine Lib zu verwenden was falsch gemacht.
-
@zeropage sagte in VS22 statische Lib erzeugen/verwenden:
acosf
Möglicherweise enthalten die Header-Files der Library inline Funktionen die diverse Funktionen wie
acosf
verwenden, ohne dass die Header-Filesmath.h
bzw.cmath
inkludieren. In dem Fall musst du halt selbstmath.h
bzw.cmath
inkludieren vor dem Header-File der Library inkludieren.Das ist ein Schönheitsfehler der natürlich in den Header-Files der Library gefixt werden sollte. Wenn die Library von dir/deiner Firma ist, solltest du das machen. Ansonsten kannst du es maximal dem Hersteller/Maintainer der Library melden. (Fremde Header-Files zu ändern würde ich nicht empfehlen. Das macht nur Ärger beim Updaten auf neuere Versionen.)
-
@hustbaer sagte in VS22 statische Lib erzeugen/verwenden:
@zeropage sagte in VS22 statische Lib erzeugen/verwenden:
acosf
Möglicherweise enthalten die Header-Files der Library inline Funktionen die diverse Funktionen wie
acosf
verwenden, ohne dass die Header-Filesmath.h
bzw.cmath
inkludieren. In dem Fall musst du halt selbstmath.h
bzw.cmath
inkludieren vor dem Header-File der Library inkludieren.Ich habe zwar einen kleinen math-Header, aber die dortigen Funktionen heißen alle anders, als wie in der STL. Und haben auch einen eigenen Namensraum.
-
@zeropage sagte in VS22 statische Lib erzeugen/verwenden:
Ich habe zwar einen kleinen math-Header, aber die dortigen Funktionen heißen alle anders, als wie in der STL. Und haben auch einen eigenen Namensraum.
Hä?
In deiner Fehlermeldung stehtacosf
. Das ist eine Standard-Library Funktion aus der Standard-Library Headermath.h
.Kannst du die Fehlermeldung vielleicht bitte mal doppelklicken und dann gucken in welcher Zeile du landest, und die Zeile (bzw. besser einen Abschnitt um diese Zeile herum) dann hier posten?
Ich meine, du bist ja jetzt doch schon länger hier im Forum, und trotzdem schaffst du es nicht a) eine IDE richtig zu verwenden und b) ne Frage passend zu stellen (mit brauchbaren Infos)...
Copy+Paste ist dir bekannt?
Oder probierst du zum Spass mal aus ob dir trollen Spass macht?
-
@hustbaer sagte in VS22 statische Lib erzeugen/verwenden:
Oder probierst du zum Spass mal aus ob dir trollen Spass macht?
Nein! 🥺 Ich muss mich wirklich unglücklich ausdrücken, wenn ich diesen Eindruck mache. Jedenfalls zB bei der Fehlermeldung
E0282 the global scope has no "acosh"
betrifft es diese Codezeile:_NODISCARD _Check_return_ inline float acos(_In_ float _Xx) noexcept /* strengthened */ { return _CSTD acosf(_Xx); }
in cmath. Und gefühlt jede Funktion dort wird angemeckert. Also in
_NODISCARD _Check_return_ inline float acosh(_In_ float _Xx) noexcept /* strengthened */ { return _CSTD acoshf(_Xx); }
gleich der nächste Fehler.
Das sind doch keine normalen Fehlermeldungen? Da müssen doch die Einstellungen schuldig sein, die ich vorgenommen habe. Welche, habe ich oben beschrieben.
Ich weiß nicht, was Ihr noch benötigt.
-
@zeropage sagte in VS22 statische Lib erzeugen/verwenden:
E0282 the global scope has no "acosh"
Das besagt einfach, dass dem Compiler keine Funktion mit dem Namen acosh bekant ist.
Was zeigt er denn zu der Code Zeile für einen Fehler an?_NODISCARD _Check_return_ inline float acosh(_In_ float _Xx) noexcept /* strengthened */ { return _CSTD acoshf(_Xx); }
Wenn er diese Zeile nicht versteht, dann kannst Du acosh nicht benutzen.
Ich vermute mal einfach Du hast falschen Header oder fehlende Header.
-
Ich würde als erstes mal probieren ein neues Projekt zu erstellen, und da einfach mal nur
#include <cmath>
reinzuschreiben. Ohne dass du vorher irgendwas bezüglich Include-Pfade änderst.
Wenn das geht, dann füg den Include-Pfad für deine Library dazu und guck ob es immer noch geht. Wenn's immer noch geht, dann hast du dir dein Projekt-File irgendwie zerschossen/verkonfiguriert.Wenn's dann auf einmal nicht mehr geht... pfuh, dann wird's schwierig.
-
Oder versuch mal das: https://stackoverflow.com/questions/42777424/visual-studio-2017-errors-on-standard-headers
("Windows Universal CRT SDK" dazuinstallieren, ggf. noch Windows SDK Version im Projekt umstellen.)ps: Hast du vielleicht vergessen im VS 2022 Installer die Workload "Desktop development with C++" anzuhaken?
-
Ja ok, danke.
Das werde ich mal alles überprüfen.