boost.asio: "please define _WIN32_WINNT"



  • Hallo zusammen, son bisschen gehört das wohl auch in die Compiler/IDE-Richtung, aber doch eher hierhin:

    Ich bekomme beim Include von <boost/asio/io_service.hpp> bzw. <boost/asio.hpp> folgende Warnung:

    1>Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. For example:
    1>- add -D_WIN32_WINNT=0x0501 to the compiler command line; or
    1>- add _WIN32_WINNT=0x0501 to your project's Preprocessor Definitions.
    1>Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target).
    

    Meine Fragen jetzt:

    1. Weiß jemand warum boost das nicht selbst hinbekommt? Die machen das doch sonst immer alles so elegant unter der Haube 😉
    2. Ich arbeite wechselweise auf XP, Vista und Win7 - muss ich da auf jeder Plattform einen anderen Wert eistellen?


    1. Weiß jemand warum boost das nicht selbst hinbekommt? Die machen das doch sonst immer alles so elegant unter der Haube

    Wie soll Boost herausfinden können, welche Win-Version als Target herhalten soll? 😉

    1. Ich arbeite wechselweise auf XP, Vista und Win7 - muss ich da auf jeder Plattform einen anderen Wert eistellen?

    Nö, einfach für XP nehmen. Damit werden halt Vista/Win7 Features deaktiviert, laufen tuts aber trotzdem.



  • Das kann bei asio aber bitter werden, weil in der Winsock doch einiges in Vista/7 verbessert wurde.
    Du könntest das WINVER-Makro nutzen. Dann sollte das automatisch klappen.



  • Jodocus schrieb:

    Das kann bei asio aber bitter werden, weil in der Winsock doch einiges in Vista/7 verbessert wurde.
    Du könntest das WINVER-Makro nutzen. Dann sollte das automatisch klappen.

    Laut deinem Link muss ich beim WINVER-Makro genauso eine Versionsnummer angeben wie beim _WIN32_WINNT, das bringt mich da also nicht weiter.

    Ethon schrieb:

    Wie soll Boost herausfinden können, welche Win-Version als Target herhalten soll? 😉

    Normalerweise findet es raus auf welchem System compiliert wird und übersetzt entsprechend, oder nicht? Gilt das nur für die Compiler? Hat MSVC da keine Kenntnisse, wo es installiert wurde?



  • Wenn Du in deinem VS Projekt vorkompilierte Header aktivierst ist das in der Datei targetver.h definiert.

    // targetver.h
    
    #pragma once
    
    // Including SDKDDKVer.h defines the highest available Windows platform.
    
    // If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
    // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
    
    #include <SDKDDKVer.h>
    

    edit: Stimmt gar nicht. Auch ohne die Option werden die Dateien für eine Konsolenanwendung angelegt. Nur bei "Empty project" halt nicht.



  • brotbernd schrieb:

    Auch ohne die Option werden die Dateien für eine Konsolenanwendung angelegt. Nur bei "Empty project" halt nicht.

    Ich mags nicht, wenn MSVC mir in Konsolen- oder sonstigen Anwendungen erstmal haufenweise Kram vorwirft, den ich am Ende garnicht brauche. Mal abgesehen davon schreibe ich ein Framework, so dass ich garnicht voraussehen kann, ob die Anwendung am Ende in einer Konsole oder woanders läuft.

    Ich werd also für die Entwicklungszeit erstmal _WIN32_WINNT=0x0501 setzen und schauen, ob mir das für alle Windows-Versionen reicht. Danke allen 🙂



  • pumuckl schrieb:

    Jodocus schrieb:

    Das kann bei asio aber bitter werden, weil in der Winsock doch einiges in Vista/7 verbessert wurde.
    Du könntest das WINVER-Makro nutzen. Dann sollte das automatisch klappen.

    Laut deinem Link muss ich beim WINVER-Makro genauso eine Versionsnummer angeben wie beim _WIN32_WINNT, das bringt mich da also nicht weiter.

    Nö, WINVER wird in <sdkddkver.h> definiert, das musst du einfach nur einbinden und gut ist. Der Link beschreibt nur, dass man dieses Makro auch nach belieben verändern kann...



  • pumuckl schrieb:

    Ethon schrieb:

    Wie soll Boost herausfinden können, welche Win-Version als Target herhalten soll? 😉

    Normalerweise findet es raus auf welchem System compiliert wird und übersetzt entsprechend, oder nicht? Gilt das nur für die Compiler? Hat MSVC da keine Kenntnisse, wo es installiert wurde?

    Dieses - bei *NIX übliche - Verhalten, ist in der Windows-Welt ziemlich verpönt.

    Weil die Leute da keine Lust haben alle Programme erstmal selbst zu übersetzen 😉



  • hustbaer schrieb:

    Dieses - bei *NIX übliche - Verhalten, ist in der Windows-Welt ziemlich verpönt.

    Weil die Leute da keine Lust haben alle Programme erstmal selbst zu übersetzen 😉

    Grade beim MSVC hätte ich jetzt erwartet, dass er auch bei einem allgemeinen Build irgendein getVersion() oder ähnliches aus der WinAPI bemühen kann und dementsprechend die WINVER und wie sie nicht alle heißen belegen kann. Auch ohne dass man ihn extra gegen die Zielplttform baut.


Anmelden zum Antworten