footnote
This commit is contained in:
parent
49768295f2
commit
c268071314
@ -9,7 +9,11 @@
|
|||||||
// #cgo LDFLAGS: -lBearLibTerminal
|
// #cgo LDFLAGS: -lBearLibTerminal
|
||||||
```
|
```
|
||||||
Что подразумевает глобальную вивдимость библиотеки. Увы, пока пакета с BLT для распространенных дистрибутивов Linux нет.
|
Что подразумевает глобальную вивдимость библиотеки. Увы, пока пакета с BLT для распространенных дистрибутивов Linux нет.
|
||||||
Поэтому беде нужно помочь руками. Сначала вручную показать линтеру, что такая библиотека есть, и потом перезагрузить
|
Поэтому беде нужно помочь руками.
|
||||||
|
|
||||||
|
#####Первый метод
|
||||||
|
|
||||||
|
Сначала вручную показать линтеру, что такая библиотека есть, и потом перезагрузить
|
||||||
кеш путей к библиотекам::
|
кеш путей к библиотекам::
|
||||||
```bash
|
```bash
|
||||||
$ sudo echo "/path/to/libbearterminal.so" > /etc/ld.so.conf.d/libbearterminal.conf && sudo ldconfig
|
$ sudo echo "/path/to/libbearterminal.so" > /etc/ld.so.conf.d/libbearterminal.conf && sudo ldconfig
|
||||||
@ -19,18 +23,20 @@ $ sudo echo "/path/to/libbearterminal.so" > /etc/ld.so.conf.d/libbearterminal.co
|
|||||||
распространенному стереотипу - доля красноглазых пользователей Linux с каждым годом падает, и эта консольная магия для
|
распространенному стереотипу - доля красноглазых пользователей Linux с каждым годом падает, и эта консольная магия для
|
||||||
большинства уже некомильфо.
|
большинства уже некомильфо.
|
||||||
|
|
||||||
Способ второй, которым воспользовался я, намного проще для пользователя.
|
#####Второй метод
|
||||||
Редактируем файл с биндингами примерно следующим образом:
|
|
||||||
|
Способ второй, которым воспользовался я, с которым намного проще жить.
|
||||||
|
Редактируем файл с биндингами (BearLibTerminal.go) примерно следующим образом:
|
||||||
```go
|
```go
|
||||||
// #cgo LDFLAGS: -L. -Wl,-rpath -Wl,./ -lBearLibTerminal
|
// #cgo LDFLAGS: -L. -Wl,-rpath -Wl,./ -lBearLibTerminal
|
||||||
// #include <stdlib.h>
|
// #include <stdlib.h>
|
||||||
// #include <BearLibTerminal.h>
|
// #include <BearLibTerminal.h>
|
||||||
import "C"
|
import "C"
|
||||||
```
|
```
|
||||||
(знатоки С, простите, я этими флагами вообще
|
(знатоки С, простите если что не так, я этими флагами вообще
|
||||||
пользоваться не умею)
|
пользоваться не умею)
|
||||||
|
|
||||||
Далее - собираем приложение с libtcod ```go build -o test```.
|
Далее - собираем минимальное приложение с blt ```go build -o test```.
|
||||||
|
|
||||||
Проверяем, что относительные пути записались в бинарник:
|
Проверяем, что относительные пути записались в бинарник:
|
||||||
```bash
|
```bash
|
||||||
@ -41,14 +47,20 @@ objdump -p test | grep RPATH
|
|||||||
RPATH ./
|
RPATH ./
|
||||||
```
|
```
|
||||||
|
|
||||||
Ура! Теперь кладем libBearLibTerminal.so прямо в папку с main.go и запускам go run (или скомпилированный бинарник) прям
|
Ура! Теперь кладем libBearLibTerminal.so прямо в папку с main.go и запускам go run
|
||||||
оттуда. Собранные таким образом бинарники будут искать библиотеку в той же папке, где находятся они сами.
|
(или скомпилированный бинарник) прям оттуда. Собранные таким образом бинарники будут
|
||||||
|
искать библиотеку в той же папке, где находятся они сами.
|
||||||
|
|
||||||
Теперь при дистрибуции приложения можно просто положить .so файл библиотеки рядом, и все будет работать!
|
Теперь при дистрибуции приложения можно просто положить .so файл библиотеки рядом,
|
||||||
|
и все будет работать!
|
||||||
|
|
||||||
Вторая кочка, на которой мне пришлось столкнуться -
|
Горутины и многопоточность
|
||||||
то то, что вызов любой своей функции не из main thread BLT воспринимает крайне нервно,
|
---
|
||||||
и сыпет фатальными ошибками. Справедливости ради точно так же ведет себя и большинство
|
|
||||||
|
Вторая кочка, на которой мне пришлось столкнуться - то то, что вызов любой своей
|
||||||
|
функции не из main thread BLT воспринимает крайне нервно,
|
||||||
|
и сыпет фатальными ошибками. Это неприятно, тк часто Го выбирают именно за
|
||||||
|
многопоточность из коробки. Но справедливости ради точно так же ведет себя и большинство
|
||||||
других библиотек связанных с рендером и вводом-выводом, тот же SDL например. Так что
|
других библиотек связанных с рендером и вводом-выводом, тот же SDL например. Так что
|
||||||
воспринимайте это как милую особенность использования CGO.
|
воспринимайте это как милую особенность использования CGO.
|
||||||
|
|
||||||
@ -99,7 +111,7 @@ func MainLoop(state GameState) {
|
|||||||
|
|
||||||
State - это обычный Value Object, экземпляр типа GameState. Я его использую как
|
State - это обычный Value Object, экземпляр типа GameState. Я его использую как
|
||||||
контейнер для важных для игры данных - уровня, состояния рендера, разных тикеров,
|
контейнер для важных для игры данных - уровня, состояния рендера, разных тикеров,
|
||||||
каналов для рендера и ввода-вывода итп. Так как он глобальный (или просто передается
|
каналов для рендера и ввода-вывода итп[^1]. Так как он глобальный (или просто передается
|
||||||
по аргументам), то именно в него встроен метод Do. Если нам скажем в пакете где
|
по аргументам), то именно в него встроен метод Do. Если нам скажем в пакете где
|
||||||
описывается некий предмет надо нарисовать при его поднятии какой-то супер-эффект
|
описывается некий предмет надо нарисовать при его поднятии какой-то супер-эффект
|
||||||
на экране - мы поступаем вот так:
|
на экране - мы поступаем вот так:
|
||||||
@ -139,3 +151,7 @@ func renderSuperEffect() {
|
|||||||
запихивает в очередь на выполнения в main thread эту самую реализацию. Которая с успехом
|
запихивает в очередь на выполнения в main thread эту самую реализацию. Которая с успехом
|
||||||
выполняется в main loop. В целом картина именно такая, но больше подробностей можно
|
выполняется в main loop. В целом картина именно такая, но больше подробностей можно
|
||||||
найти по ссылкам в комментариях.
|
найти по ссылкам в комментариях.
|
||||||
|
|
||||||
|
[^1]: Если такой контейнер сериализовать (рекурсивно вместе со всем содержимым) и
|
||||||
|
записать на диск, то потом можно его прочитать и десереализовать. Получив тем самым почти
|
||||||
|
бесплатно Save / Load.
|
Loading…
x
Reference in New Issue
Block a user