mieki256's diary



2024/04/04(木) [n年前の日記]

#1 [prog] 自作スクリーンセーバをLinuxに対応させたい

C++とOpenGLを使ってWindows用のスクリーンセーバを自作したけれど。せっかく作ったのだから Linux上でもビルドできるようにしたい。もっとも、Linux用のスクリーンセーバを作るわけではなくて、せめてGLFWを使ったデモプログラムとして動かせるようにするつもり。

Ubuntu Linux 20.04 LTS上でビルドしようとしているけれど、いくつか問題に遭遇。

Linux には tchar.h は無いのだな…。とりあえず今回は、#include <tchar.h> をコメントアウトするだけでビルドできそう。

MessageBox() も無いな…。コレもとりあえずコメントアウトしておく方向で。

実行バイナリに埋め込むバイナリファイル(*.png, *.jpg)のシンボルも、ちょっと変わる。MinGW g++ 6.3.0 用は先頭に「_」がつかないけれど、MSYS2 g++ 13.2.0 や Ubuntu Linux 22.04 LTS の g++ 11.4.0 なら先頭に「_」がつく。

ソースの切り替えについて :

Windows用とLinux用の両方でビルドが通るように、定義済みマクロでソースの中身が変わるようにした。
  • Windows上でビルドする際は _WIN32 が定義される。
  • MSYS2上でビルドする際は __MINGW64__ が定義される。
  • Linux上でビルドする際は __linux__ が定義される。

#if defined(__MINGW64__) || defined(__linux__)

// MSYS2 (Windows, g++ 13.2.0) or Linux

#else

// MinGW (Windows, g++ 6.3.0)

#endif


#ifdef _WIN32

// Windows only

#include <tchar.h>
#include <windows.h>
#include <scrnsave.h>
#include <mmsystem.h>

#endif

Ubuntuのバージョンによって結果が違ってしまう :

VMware Player + Ubuntu Linux 20.04 LTS x64 ならビルドが通るのだけど。実機 + Ubuntu Linux 22.04 LTS x64 ではビルドが通らない…。

Ubuntu Linux 20.04 LTS x64 の場合。ビルドは通る。
$ g++ --version
 g++ (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
 ...

$ ld --version
 GNU ld (GNU Binutils for Ubuntu) 2.34
 ...

$ make -f Makefile.glfw
g++ -o ssp3droadglfw.o -c ssp3droadglfw.cpp
g++ -o render.o -c render.cpp
ld -r -b binary -o sprites.o sprites.png
ld -r -b binary -o bg_summer.o bg_summer.jpg
ld -r -b binary -o bg_autumn.o bg_autumn.jpg
ld -r -b binary -o bg_winter.o bg_winter.jpg
ld -r -b binary -o bg_night.o bg_night.jpg
g++ -o ssp3droadglfw ssp3droadglfw.o render.o sprites.o bg_summer.o bg_autumn.o bg_winter.o bg_night.o -lGL -lGLU -lglfw -lm


Ubuntu Linux 22.04 LTS x64 の場合。エラーが出てしまう…。
$ g++ --version
 g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
 ...

$ ld --version
 GNU ld (GNU Binutils for Ubuntu) 2.38
 ...

$ make -f Makefile.glfw
g++ -o ssp3droadglfw.o -c ssp3droadglfw.cpp
g++ -o render.o -c render.cpp
ld -r -b binary -o sprites.o sprites.png
ld -r -b binary -o bg_summer.o bg_summer.jpg
ld -r -b binary -o bg_autumn.o bg_autumn.jpg
ld -r -b binary -o bg_winter.o bg_winter.jpg
ld -r -b binary -o bg_night.o bg_night.jpg
g++ -o ssp3droadglfw ssp3droadglfw.o render.o sprites.o bg_summer.o bg_autumn.o bg_winter.o bg_night.o -lGL -lGLU -lglfw -lm
/usr/bin/ld: render.o: relocation R_X86_64_PC32 against absolute symbol `_binary_sprites_png_size' in section `.text' is disallowed
collect2: error: ld returned 1 exit status
make: *** [Makefile.glfw:26: ssp3droadglfw] エラー 1

このエラーはどういう意味なんだろう…。

テクスチャを展開できない :

ビルドが通る、VMware Player + Ubuntu Linux 20.04 LTS x64上でも、動作に問題がある。出来上がった実行バイナリを動かしてみると、テクスチャ画像を展開できる時と、展開できない時がある…。必ず展開できるわけでもなく、必ず展開できないわけでもない。こういうバグが一番困る…。

実機上なら動作が変わるのだろうか。しかし、そちらは Ubuntu Linux 22.04 LTS だから、ビルド自体が通らない…。

#2 [prog] MSYS2パッケージをダウングレードしておいた

ここ最近、xzパッケージにバックドアが仕掛けられていたという事件が気になってる。MSYS2 のxzパッケージを調べてみたら、事件を起こしたバージョン、5.6.1 が入ってた…。

pacman -Ss xz

念のために、一つ前の 5.4.6-2 にダウングレードしてみたい。MSYS2上でそんなことをして意味があるのかないのか分からんけど…。まあ、pacman でダウングレードする方法を知っておいてもいいだろう…。

_パッケージのダウングレード - ArchWiki
_MSYS2でパッケージをダウングレードする - Qiita

/var/cache/pacman/pkg/ に、pacmanのキャッシュが残ってるらしい。調べてみたら、古いバージョンも残っていた。

$ ls /var/cache/pacman/pkg/ | grep xz
mingw-w64-i686-xz-5.4.5-1-any.pkg.tar.zst
mingw-w64-i686-xz-5.4.5-1-any.pkg.tar.zst.sig
mingw-w64-i686-xz-5.4.6-1-any.pkg.tar.zst
mingw-w64-i686-xz-5.4.6-1-any.pkg.tar.zst.sig
mingw-w64-i686-xz-5.4.6-2-any.pkg.tar.zst
mingw-w64-i686-xz-5.4.6-2-any.pkg.tar.zst.sig
mingw-w64-i686-xz-5.6.1-2-any.pkg.tar.zst
mingw-w64-i686-xz-5.6.1-2-any.pkg.tar.zst.sig
mingw-w64-x86_64-xz-5.4.5-1-any.pkg.tar.zst
mingw-w64-x86_64-xz-5.4.5-1-any.pkg.tar.zst.sig
mingw-w64-x86_64-xz-5.4.6-1-any.pkg.tar.zst
mingw-w64-x86_64-xz-5.4.6-1-any.pkg.tar.zst.sig
mingw-w64-x86_64-xz-5.4.6-2-any.pkg.tar.zst
mingw-w64-x86_64-xz-5.4.6-2-any.pkg.tar.zst.sig
mingw-w64-x86_64-xz-5.6.1-2-any.pkg.tar.zst
mingw-w64-x86_64-xz-5.6.1-2-any.pkg.tar.zst.sig
xz-5.4.5-1-x86_64.pkg.tar.zst
xz-5.4.5-1-x86_64.pkg.tar.zst.sig
xz-5.4.6-1-x86_64.pkg.tar.zst
xz-5.4.6-1-x86_64.pkg.tar.zst.sig
xz-5.4.6-2-x86_64.pkg.tar.zst
xz-5.4.6-2-x86_64.pkg.tar.zst.sig
xz-5.6.1-2-x86_64.pkg.tar.zst
xz-5.6.1-2-x86_64.pkg.tar.zst.sig

$ ls /var/cache/pacman/pkg/ | grep lzma
liblzma-5.4.5-1-x86_64.pkg.tar.zst
liblzma-5.4.5-1-x86_64.pkg.tar.zst.sig
liblzma-5.4.6-1-x86_64.pkg.tar.zst
liblzma-5.4.6-1-x86_64.pkg.tar.zst.sig
liblzma-5.4.6-2-x86_64.pkg.tar.zst
liblzma-5.4.6-2-x86_64.pkg.tar.zst.sig
liblzma-5.6.1-2-x86_64.pkg.tar.zst
liblzma-5.6.1-2-x86_64.pkg.tar.zst.sig

pacman -U でダウングレードできる。

pacman -U file:///var/cache/pacman/pkg/mingw-w64-i686-xz-5.4.6-2-any.pkg.tar.zst
pacman -U file:///var/cache/pacman/pkg/mingw-w64-x86_64-xz-5.4.6-2-any.pkg.tar.zst
pacman -U file:///var/cache/pacman/pkg/xz-5.4.6-2-x86_64.pkg.tar.zst
pacman -U file:///var/cache/pacman/pkg/liblzma-5.4.6-2-x86_64.pkg.tar.zst

$ pacman -Ss xz
clangarm64/mingw-w64-clang-aarch64-xz 5.6.1-2
    Library and command line tools for XZ and LZMA compressed files (mingw-w64)
mingw32/mingw-w64-i686-xz 5.6.1-2 [インストール済み: 5.4.6-2]
    Library and command line tools for XZ and LZMA compressed files (mingw-w64)
mingw64/mingw-w64-x86_64-xz 5.6.1-2 [インストール済み: 5.4.6-2]
    Library and command line tools for XZ and LZMA compressed files (mingw-w64)
ucrt64/mingw-w64-ucrt-x86_64-xz 5.6.1-2
    Library and command line tools for XZ and LZMA compressed files (mingw-w64)
clang32/mingw-w64-clang-i686-xz 5.6.1-2
    Library and command line tools for XZ and LZMA compressed files (mingw-w64)
clang64/mingw-w64-clang-x86_64-xz 5.6.1-2
    Library and command line tools for XZ and LZMA compressed files (mingw-w64)
msys/liblzma 5.6.1-2 (libraries) [インストール済み: 5.4.6-2]
    Library for XZ and LZMA compressed files
msys/xz 5.6.1-2 (compression) [インストール済み: 5.4.6-2]
    Library and command line tools for XZ and LZMA compressed files

インストール済み、が 5.4.6-2 になった。

ダウングレードできたら、/etc/pacman.conf の IgnorePkg= にパッケージ名を追加する必要があるらしい。これをしておかないとアップグレードされてしまうのだとか。

vi /etc/pacman.conf
IgnorePkg   = xz liblzma mingw-w64-i686-xz mingw-w64-x86_64-xz

これで合ってるのかな…。分からん…。

#3 [anime] 「勇気爆発バーンブレイバーン」最終回を視聴

録画してたソレをようやく視聴。ロボットアニメ…だろうか? だよな。たぶん。

いやはやコレは…。なんというか…。途中まで「自分は一体何を見せられているんだろう…?」と…。素晴らしい。

なんとなく、「真面目に不真面目」とか「ふざける時は全力で」とかそういう言葉が脳裏に浮かんだ。どうせやるなら徹底的に、だよな…。何にせよ、とんでもないアニメを見せてもらった気がする…。

以上、1 日分です。

過去ログ表示

Prev - 2024/04 -
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project