'variable' 声明为 'inline' 字段
'variable' declared as an 'inline' field
相关源代码的 Github 存储库位于:https://github.com/arishackstv/cubemod
这是 mod 游戏 Cubeworld 的参考,我正在尝试 mod 符合我自己的口味。
存储库有一个 CMakeLists.txt,我用它来生成 MinGW 生成文件,因为创建者说 mod 是使用 MinGW 在 mode 版本中构建的。这是我使用他的 CMakeLists.txt 的 CMake 配置:CMake Configuration
似乎生成的 makefile 没有问题,所以我尝试制作。我遇到了以下错误:Errors
绝大多数错误都遵循以下原则:
In file included from C:\Users\[username]\Desktop\cubemod-master\src\core\main.cpp:18:0:C:/Users/[username]/Desktop/CUBEMO~1/src/core/hook/hooks/artifact/display/hook_artifact_display_roundf.h:9:22: error: 'hook' declared as an 'inline' field static inline Hook* hook;
很多这样的内联字段错误。产生上述具体错误的具体代码是这样的:
#pragma once
#include <hook/hook.h>
#include <game_structures.h>
#include "hook_concat_artifact_suffix.h"
class Hookroundf : public Hook
{
static inline Hook* hook;
//This is literally only called from the artifact display thing so it's fine
static float HOOK cube_roundf(float f)
{
//Get actual artifact stats
return Main::GetInstance().GetLocalPlayer()->GetIncreasedArtifactStats((ArtifactType)HookConcatArtifactSuffix::artifact_index, true);
}
public:
Hookroundf() : Hook(MemoryHelper::GetCubeBase() + 0x275760, (void*)cube_roundf, hook)
{}
};
这个家伙Github的实际编译版本确实有效,我试过了,所以我觉得他的源代码遇到编译错误很奇怪。我想知道这是否归结为我的构建环境设置不正确?如果有人能够成功编译此代码,我很想听听您的步骤,看看我做错了什么。如果这个源代码确实是错误的,我很想知道可以做些什么来修复它。静态内联字段不是 C++ 17 的东西吗?也许就是这样?虽然我尝试在 CMAKE_CXX_FLAGS 中指定 -std=C++17 但这似乎并没有做到。
编辑:
升级我的 gcc 版本的建议非常有帮助。将 gcc 更新到最新可用版本 (9.20) 后,修复了与内联变量等不可用 C++ 功能相关的错误!现在还有一些错误,但数量要少得多。这是我们尝试制作的新输出:
C:\Users\[username]\Desktop\cubemod-master\BUILD_>make
Scanning dependencies of target cubemod
[ 33%] Building CXX object CMakeFiles/cubemod.dir/src/dllmain.cpp.obj
[ 66%] Building CXX object CMakeFiles/cubemod.dir/src/core/main.cpp.obj
[100%] Linking CXX shared library ..\bin\cubemod.cwmod
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: CMakeFiles\cubemod.dir/objects.a(main.cpp.obj):main.cpp:(.text+0x2f): undefined reference to `xed_operand_values_set_mode'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: CMakeFiles\cubemod.dir/objects.a(main.cpp.obj):main.cpp:(.text$_ZN4Hook11InstallHookEv[__ZN4Hook11InstallHookEv]+0x11): undefined reference to `xed_tables_init'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: CMakeFiles\cubemod.dir/objects.a(main.cpp.obj):main.cpp:(.text$_ZN4Hook11InstallHookEv[__ZN4Hook11InstallHookEv]+0x89): undefined reference to `xed_decode'
collect2.exe: error: ld returned 1 exit status
make[2]: *** [../bin/cubemod.cwmod] Error 1
make[1]: *** [CMakeFiles/cubemod.dir/all] Error 2
make: *** [all] Error 2
我将开始调查这些新错误,如有任何帮助,我将不胜感激。但我想这个 post 标题提出的特定问题可以考虑 'solved'.
从你的 screenshot 来看,你正在使用 gcc 5.1.0。
如果您查看 gcc standard compliance,您会发现 gcc 7 中提供了内联变量。
因此,如果可能,您将必须升级您的工具链或使用您的版本中可用的工具链。
此致。
相关源代码的 Github 存储库位于:https://github.com/arishackstv/cubemod
这是 mod 游戏 Cubeworld 的参考,我正在尝试 mod 符合我自己的口味。
存储库有一个 CMakeLists.txt,我用它来生成 MinGW 生成文件,因为创建者说 mod 是使用 MinGW 在 mode 版本中构建的。这是我使用他的 CMakeLists.txt 的 CMake 配置:CMake Configuration
似乎生成的 makefile 没有问题,所以我尝试制作。我遇到了以下错误:Errors
绝大多数错误都遵循以下原则:
In file included from C:\Users\[username]\Desktop\cubemod-master\src\core\main.cpp:18:0:C:/Users/[username]/Desktop/CUBEMO~1/src/core/hook/hooks/artifact/display/hook_artifact_display_roundf.h:9:22: error: 'hook' declared as an 'inline' field static inline Hook* hook;
很多这样的内联字段错误。产生上述具体错误的具体代码是这样的:
#pragma once
#include <hook/hook.h>
#include <game_structures.h>
#include "hook_concat_artifact_suffix.h"
class Hookroundf : public Hook
{
static inline Hook* hook;
//This is literally only called from the artifact display thing so it's fine
static float HOOK cube_roundf(float f)
{
//Get actual artifact stats
return Main::GetInstance().GetLocalPlayer()->GetIncreasedArtifactStats((ArtifactType)HookConcatArtifactSuffix::artifact_index, true);
}
public:
Hookroundf() : Hook(MemoryHelper::GetCubeBase() + 0x275760, (void*)cube_roundf, hook)
{}
};
这个家伙Github的实际编译版本确实有效,我试过了,所以我觉得他的源代码遇到编译错误很奇怪。我想知道这是否归结为我的构建环境设置不正确?如果有人能够成功编译此代码,我很想听听您的步骤,看看我做错了什么。如果这个源代码确实是错误的,我很想知道可以做些什么来修复它。静态内联字段不是 C++ 17 的东西吗?也许就是这样?虽然我尝试在 CMAKE_CXX_FLAGS 中指定 -std=C++17 但这似乎并没有做到。
编辑: 升级我的 gcc 版本的建议非常有帮助。将 gcc 更新到最新可用版本 (9.20) 后,修复了与内联变量等不可用 C++ 功能相关的错误!现在还有一些错误,但数量要少得多。这是我们尝试制作的新输出:
C:\Users\[username]\Desktop\cubemod-master\BUILD_>make
Scanning dependencies of target cubemod
[ 33%] Building CXX object CMakeFiles/cubemod.dir/src/dllmain.cpp.obj
[ 66%] Building CXX object CMakeFiles/cubemod.dir/src/core/main.cpp.obj
[100%] Linking CXX shared library ..\bin\cubemod.cwmod
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: CMakeFiles\cubemod.dir/objects.a(main.cpp.obj):main.cpp:(.text+0x2f): undefined reference to `xed_operand_values_set_mode'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: CMakeFiles\cubemod.dir/objects.a(main.cpp.obj):main.cpp:(.text$_ZN4Hook11InstallHookEv[__ZN4Hook11InstallHookEv]+0x11): undefined reference to `xed_tables_init'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: CMakeFiles\cubemod.dir/objects.a(main.cpp.obj):main.cpp:(.text$_ZN4Hook11InstallHookEv[__ZN4Hook11InstallHookEv]+0x89): undefined reference to `xed_decode'
collect2.exe: error: ld returned 1 exit status
make[2]: *** [../bin/cubemod.cwmod] Error 1
make[1]: *** [CMakeFiles/cubemod.dir/all] Error 2
make: *** [all] Error 2
我将开始调查这些新错误,如有任何帮助,我将不胜感激。但我想这个 post 标题提出的特定问题可以考虑 'solved'.
从你的 screenshot 来看,你正在使用 gcc 5.1.0。
如果您查看 gcc standard compliance,您会发现 gcc 7 中提供了内联变量。
因此,如果可能,您将必须升级您的工具链或使用您的版本中可用的工具链。
此致。