Steamworks API 仅在 Windows 上崩溃

问题描述 投票:0回答:1

在 Windows 64 位上,我在使用 C++ 中的 Steamworks sdk 时遇到崩溃。

#include <iostream>
#include <steam_api.h>
#include <isteamapps.h>
#include <isteamfriends.h>
#include <isteamuser.h>


int main(int argc, char const *argv[])
{
    SteamErrMsg errMsg;
    if (SteamAPI_InitEx(&errMsg) == k_ESteamAPIInitResult_OK) {
        auto steamUser = SteamUser();
        if (steamUser) {
            std::cout << "SteamUser() is valid." << std::endl;
            try {
                CSteamID steamID = steamUser->GetSteamID();
                std::cout << "SteamID: " << steamID.ConvertToUint64() << std::endl;
            } catch (const std::exception &e) {
                std::cout << "Exception occurred" << std::endl;
            }
        } else {
            std::cout << "SteamUser() is nullptr." << std::endl;
        }
        SteamAPI_Shutdown();
    } else {
        std::cout << "Failed to initialize Steam API." << std::endl;
    }
    return 0;
}

使用gdb,我们可以看到崩溃发生在steamclient.dll的一个steam函数中,在该行:

CSteamID steamID = steamUser->GetSteamID();

warning: [S_API] SteamAPI_Init(): Loaded 'C:\Program Files (x86)\Steam\steamclient64.dll' OK.
Setting breakpad minidump AppID = 3025660
SteamInternal_SetMinidumpSteamID:  Caching Steam ID:  76561198137762511 [API loaded no]
Initialize Steam API OK.
SteamUser() is valid.

Thread 1 "MainThrd" received signal SIGSEGV, Segmentation fault.
0x00007ffead18e225 in steamclient64!Steam_NotifyMissingInterface ()
    from C:\Program Files (x86)\Steam\steamclient64.dll

我尝试了不同版本的steam sdk。
我尝试重新安装 Steam 客户端。

在 Linux 上,提供的代码可以完美运行。

我还尝试通过 steam consol steam api 调试描述这里获取更多信息。

这是我在执行示例程序期间得到的最详细的输出。我没有发现任何可疑的地方。

] log_ipc game_obj.exe
Started IPC logging for game_obj.exe.
Each IPC call is being logged to C:\Program Files (x86)\Steam\logs\ipc_SteamClient.log.
You can stop logging IPC calls using "log_ipc 0"
00003005 game_obj.exe:458755 > IClientUtils::GetSteamRealm( ) = 1, 
00003006 game_obj.exe:458755 > IClientUtils::GetConnectedUniverse( ) = 1, 
00003006 game_obj.exe:458755 > IClientUtils::GetIPCountry( ) = "FR", 
00003006 game_obj.exe:458755 > IClientUtils::GetServerRealTime( ) = 1719931821, 
[2024-07-02 16:50:22] AppID 3025660 adding PID 9280 as a tracked process ""C:\Users\maman\test_steam_api\install\game_obj.exe""
Game process added : AppID 3025660 ""C:\Users\maman\test_steam_api\install\game_obj.exe"", ProcID 9280, IP 0.0.0.0:0
[2024-07-02 16:50:22] SSGL: InternalUpdateClientGame indicates change to games list
CClientMusic::OnAppEventStateChange 3025660 4 2004
00003007 game_obj.exe:458755 > IClientUtils::SetAppIDForCurrentPipe( 3025660, 1, ) = 3025660, 
00003015 game_obj.exe:458755 > IClientApps::GetAppData( 3025660, "config/systemprofile", 128, ) = 0, 0 bytes, 
[2024-07-02 16:50:22] Setting MESA_GLSL_CACHE_DIR=C:\Program Files (x86)\Steam\steamapps\shadercache\3025660 MESA_DISK_CACHE_READ_ONLY_FOZ_DBS=steam_cache,steam_precompiled
00003015 game_obj.exe:458755 > IClientUtils::GetSteamEnvironmentForApp( 3025660, 8192, ) = 1869, 8192 bytes [45 4e 41 42 4c 45 5f 56 4b 5f 4c 41 59 45 52 5f ... 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00], 
00003017 game_obj.exe:458755 > IClientUtils::GetAppID( ) = 3025660, 
00003018 game_obj.exe:458755 > IClientUtils::RecordSteamInterfaceCreation( "SteamUtils010", "", )
00003018 game_obj.exe:458755 > IClientUtils::GetAppID( ) = 3025660, 
00003018 game_obj.exe:458755 > IClientUtils::RecordSteamInterfaceCreation( "SteamUser023", "User", )
00003019 game_obj.exe:458755 > IClientUtils::GetAppID( ) = 3025660, 
00003043 game_obj.exe:458755 > IClientUser::GetSteamID( ) = [U:1:177496783], 
00003048 game_obj.exe:458755 > IClientUtils::GetAppID( ) = 3025660, 
00003048 game_obj.exe:458755 > IClientUtils::RecordSteamInterfaceCreation( "SteamUser023", "", )
00003049 game_obj.exe:458755 > IClientUser::GetSteamID( ) = [U:1:177496783], 
[2024-07-02 16:50:22] Warming Config Cache 3025660
Warming Config Cache 3025660
[2024-07-02 16:50:22][733.235464] Adding process 9280 for gameID 3025660
[2024-07-02 16:50:22] Flushed store 'userlocal' to 'C:\Program Files (x86)\Steam\userdata\177496783\config\localconfig.vdf'
[2024-07-02 16:50:23] SSGL: change [3025660] LCT -671085920->0
CClientMusic::OnSteamPipeClosed - 458755
[2024-07-02 16:50:26] AppID 3025660 exited.
[2024-07-02 16:50:26] OnAppLifetimeNotification: appID 3025660 has no associated session information
[2024-07-02 16:50:26] [AppID 3025660] CAPIJobStoreUserStats::BInit() - no stats found, aborting
Game process removed: AppID 3025660 ""C:\Users\maman\test_steam_api\install\game_obj.exe"", ProcID 9280 
[2024-07-02 16:50:26] AppID 3025660 no longer tracking PID 9280, exit code -1073741819
CClientMusic::OnAppEventStateChange 3025660 2004 4
[2024-07-02 16:50:26] Remove 3025660 from running list
[2024-07-02 16:50:26] Unknown shader cache type, ignoring.
[2024-07-02 16:50:26][737.322438] Removing process 9280 for gameID 3025660
[2024-07-02 16:50:26] Flushed store 'userlocal' to 'C:\Program Files (x86)\Steam\userdata\177496783\config\localconfig.vdf'
[2024-07-02 16:50:27] Flushed store 'userlocal' to 'C:\Program Files (x86)\Steam\userdata\177496783\config\localconfig.vdf'
 
] log_ipc 0
Calls over the last 13012 milliseconds:
Process              Method                                   Calls      First      Last      
-------------------- ---------------------------------------- ---------- ---------- ----------
game_obj.exe         IClientUtils::GetSteamRealm              1          3005       3005      
game_obj.exe         IClientUtils::GetConnectedUniverse       1          3006       3006      
game_obj.exe         IClientUtils::GetIPCountry               1          3006       3006      
game_obj.exe         IClientUtils::GetServerRealTime          1          3006       3006      
game_obj.exe         IClientUtils::SetAppIDForCurrentPipe     1          3007       3007      
game_obj.exe         IClientApps::GetAppData                  1          3015       3015      
game_obj.exe         IClientUtils::GetSteamEnvironmentForApp  1          3015       3015      
game_obj.exe         IClientUtils::GetAppID                   4          3017       3048      
game_obj.exe         IClientUtils::RecordSteamInterfaceCreati 3          3018       3048      
game_obj.exe         IClientUser::GetSteamID                  2          3043       3049      
IPC logging has been stopped
You can stop logging IPC calls using "log_ipc 0"
c++ steamworks-api
1个回答
0
投票

解决方案:使用MSVC代替MinGW

© www.soinside.com 2019 - 2024. All rights reserved.