所以我终于设法让 Rider 在执行以下操作时不会出错:
using SDL2
。我通过不安装 SDL2-CS 而是安装 SDL2-CS.NetCore 来做到这一点,因为我使用的是 .NET 8 。
以下代码是我运行时遇到以下问题的代码:
using System;
using SDL2;
class Program
{
static void Main()
{
// Initialize SDL with only controller and joystick support
if (SDL.SDL_Init(SDL.SDL_INIT_GAMECONTROLLER | SDL.SDL_INIT_JOYSTICK) < 0)
{
Console.WriteLine("SDL could not initialize! SDL_Error: " + SDL.SDL_GetError());
return;
}
Console.WriteLine("SDL initialized successfully for controller input!");
// Cleanup SDL resources
SDL.SDL_Quit();
}
}
当我运行此程序时,出现以下错误: System.DllNotFoundException:无法加载共享库“SDL2.dll”或其依赖项之一
在我的环境变量中,我有:
DYLD_LIBRARY_PATH=/opt/homebrew/lib:$DYLD_LIBRARY_PATH
,并在错误的更下方显示:
tried: '/opt/homebrew/lib/libSDL2.dll' (no such file)
哪个是正确的目录,只是文件不正确(应该是 libSDL2.dylib)。
如何让它在 Mac 上查找 dylib 文件,在 Windows 上查找 dll?因为这个脚本应该适用于 Mac 和 Windows。
好的!我终于找到答案了!
前往: https://github.com/flibitijibibo/SDL2-CS/tree/master
并克隆它 (
git clone https://github.com/flibitijibibo/SDL2-CS.git
) 或者下载它并解压(如有必要)。
在项目目录中添加一个新文件夹并将其命名为 SDL2,请注意,不再需要 SDL2-CS 库。然后在 SDL2 文件夹中复制 git 存储库中的文件 src/SDL2.cs。它应该看起来像这样:
然后打开它并根据需要更改
private const string nativeLibName = "SDL2";
变量,但对我来说不需要更改,它说一开始有数百个错误,但这通过将 <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
添加到您的 .csproj 来修复。
确保您安装了适用于 C++ 的 SDL2 原始库,并将 dylib 文件复制到您的目录(这是可选的,我这样做只是为了在发布生产时提供帮助)。在您的环境变量中,链接 dylib 文件,如下所示:
DYLD_LIBRARY_PATH=PATH_TO_DYLIB_FILE_EXCLUDING_FILE_NAME$DYLD_LIBRARY_PATH
显然将 PATH_TO_DYLIB_FILE_EXCLUDING_FILE_NAME 替换为实际路径。然后运行代码,它应该可以工作。