Спасибо за ответы. Изменил название модулей и разложил правильно по каталогам.
Попробовал скомпилировать этот код на Windows XP, заменил в этой строчке "libSDL2.so" на "SDL2.dll":
Код:
MODULE SDL2Lib ["libSDL2.so"];
Скачал файл SDL2.dll и поместил его в корневой каталог Блэкбокса. Файл качается отсюда: 
https://www.libsdl.org/download-2.0.php [см. «SDL2-devel-2.0.4-mingw.tar.gz (MinGW 32/64-bit)» в разделе «Development Libraries -> Windows»] 
Ещё заменил SDL_RENDERER_ACCELERATED на SDL_RENDERER_SOFTWARE (на виртуальной машине с Виндоусом SDL2 неадекватно обрабатывает отсутствие видеокарты), т. е. заменил {1} на {0} в этой строчке:
Код:
ren := SDL.SDL_CreateRenderer(win, -1, {1});
Запустил, произошло почти тоже самое: Блэкбокс завис на пару секунд (как и написано в тестовой программе - вызывается SDL_Delay(2000)). Единственное отличие от Лиунксовской версии состоит в том, что на эти две секунды в панели программ появляется новое окошко Блэкбокса. Точнее, появляется кнопка (см. прилож. рис.). Если на неё быстро нажать, она типа берёт фокус, но ничего не происходит, само окно не появляется. Почему окно невидимое? Что я забыл сделать? Помню, месяца 4 назад я быстренько сделал в Блэкбоксе на Виндоусе такую же привязку к SDL2 и всё как-то быстро заработало. Потом, кажется, оно стало иногда крэшится и я не мог понять почему (и тогда пришлось найти более понятный OO2C и делать всё в нём).
Кстати, если запустить Блэкбокс на Линуксе из-под Wine (сборка OberonCore), то из него можно будет копировать текст модулей, поэтому привожу текст ниже.
Sdl/Mod/Lib.odc:
Код:
MODULE SdlLib ["libSDL2.so"]; (* А на Винде тут должно быть ["SDL2.dll"] *)
TYPE
   Window* = POINTER TO ABSTRACT RECORD END;
   Renderer* = POINTER TO ABSTRACT RECORD END;
   Version* = RECORD
      major*, minor*, patch*: SHORTCHAR
   END;
PROCEDURE [ccall] SDL_GetVersion*(VAR ver: Version);
PROCEDURE [ccall] SDL_Init*(flags: SET): INTEGER;
PROCEDURE [ccall] SDL_Quit*;
PROCEDURE [ccall] SDL_Delay*(ms: INTEGER);
PROCEDURE [ccall] SDL_CreateWindow*
   (title: ARRAY OF CHAR; x, y, w, h: INTEGER; flags: SET): Window;
PROCEDURE [ccall] SDL_DestroyWindow*(win: Window);
PROCEDURE [ccall] SDL_CreateRenderer*
   (win: Window; index: INTEGER; flags: SET): Renderer;
PROCEDURE [ccall] SDL_DestroyRenderer*(ren: Renderer);
PROCEDURE [ccall] SDL_RenderClear*(ren: Renderer);
PROCEDURE [ccall] SDL_RenderPresent*(ren: Renderer);
PROCEDURE [ccall] SDL_SetRenderDrawColor*
   (ren: Renderer; r, g, b, a: INTEGER);
END SdlLib.
(!) DevCompiler.Compile SdlLib
SDLTest/Mod/SDLTest.odc:
Код:
MODULE SDLTest;
IMPORT StdLog, SDL := SdlLib;
VAR win: SDL.Window;
   ren: SDL.Renderer;
PROCEDURE Draw;
BEGIN
   SDL.SDL_SetRenderDrawColor(ren, 255, 0, 0, 255);
   SDL.SDL_RenderClear(ren);
   SDL.SDL_RenderPresent(ren);
   SDL.SDL_Delay(2000)
END Draw;
PROCEDURE Do*;
BEGIN
   IF SDL.SDL_Init({5}) # 0 THEN
      StdLog.String('Error in SDL_Init'); StdLog.Ln
   ELSE
      win := SDL.SDL_CreateWindow('', 10, 10, 320, 200, {});
      IF win = NIL THEN
         StdLog.String('Error in SDL_CreateWindow'); StdLog.Ln
      ELSE
         ren := SDL.SDL_CreateRenderer(win, -1, {1}); (* Если тут ошибка, то пишем {0}, чтобы переключить на с аппаратного прорисовщика на программный *)
         IF ren = NIL THEN
            StdLog.String('Error in SDL_CreateRenderer'); StdLog.Ln
         ELSE
            Draw;
            SDL.SDL_DestroyRenderer(ren)
         END;
         SDL.SDL_DestroyWindow(win)
      END
   END;
   SDL.SDL_Quit;
   StdLog.String('SDL_Quit successful.'); StdLog.Ln
END Do;
END SDLTest.
(!) DevCompiler.CompileAndUnload SDLTest
(!) SDLTest.Do