LoginSignup
1
0

More than 1 year has passed since last update.

LovyanGFX for PC 完全体を g++ on Ubuntu で

Last updated at Posted at 2022-12-17

LovyanGFX Advent Calendar 2022 2日目 の記事
「LovyanGFX for PC を Ubuntu Linux で試す」
https://qiita.com/nanbuwks/items/5ec1bf2c3c074f0b3a05

では、

また、あれこれ試したのですがフォントシンボルがリンクできないエラーが解消しませんでした。

ということで日本語フォントの箇所をまるまるコメントアウトしていました(泣

その後、ダーティーなやり方ですが曲がりなりにも解決したので紹介します。

2022/12/24追記
この記事よりも、更に改良したものを、こちらで公開しましたのでお使いください。
「library for to run arduino sketch on pc」
https://github.com/nanbuwks/arduinolib_for_PC
解説はこちら
「Arduino スケッチを PC で動かすために」
https://qiita.com/nanbuwks/items/dc252066ff4cabf85573

解決方法

日本語処理を行うヘッダファイルとCファイルを丸々インクルードするというワイルドなやりかたです。

以下の記述をユーザプログラム冒頭に入れるとうまく動きます。

#include <lgfx/Fonts/IPA/lgfx_font_japan.h>
#include <lgfx/Fonts/efont/lgfx_efont_cn.h>
#include <lgfx/Fonts/efont/lgfx_efont_ja.h>
#include <lgfx/Fonts/efont/lgfx_efont_kr.h>
#include <lgfx/Fonts/efont/lgfx_efont_tw.h>
#include <lgfx/Fonts/IPA/lgfx_font_japan.c>
#include <lgfx/Fonts/efont/lgfx_efont_cn.c>
#include <lgfx/Fonts/efont/lgfx_efont_ja.c>
#include <lgfx/Fonts/efont/lgfx_efont_kr.c>
#include <lgfx/Fonts/efont/lgfx_efont_tw.c>

PC 用 インクルードファイルに記述する

11日目の記事
「LovyanGFX for PC で Arduino スケッチを動かすために」
https://qiita.com/nanbuwks/items/50e8c7f8848a6499b5b0

PC用記述の差異を吸収するインクルードファイル pc.hpp を作りましたが、これに含めて以下のようにしてみました。

#include <lgfx/Fonts/IPA/lgfx_font_japan.h>
#include <lgfx/Fonts/efont/lgfx_efont_cn.h>
#include <lgfx/Fonts/efont/lgfx_efont_ja.h>
#include <lgfx/Fonts/efont/lgfx_efont_kr.h>
#include <lgfx/Fonts/efont/lgfx_efont_tw.h>
#include <lgfx/Fonts/IPA/lgfx_font_japan.c>
#include <lgfx/Fonts/efont/lgfx_efont_cn.c>
#include <lgfx/Fonts/efont/lgfx_efont_ja.c>
#include <lgfx/Fonts/efont/lgfx_efont_kr.c>
#include <lgfx/Fonts/efont/lgfx_efont_tw.c>

#define millis(num) SDL_GetTicks()
#define String(num) to_string(num)
#define delay(msec) SDL_Delay(msec)
#include <stdint.h>
#include <stdlib.h>
#include <string>
using namespace std;
class SerialDummy
{
  public:
    void begin(int speed){
    }
    void print(string contents){
            printf("%s",contents.c_str());
    }
    void print(int contents){
            printf("%d",contents);
    }
    void println(void){
            printf("\n");
    }
    void println(int contents){
            printf("%d\n",contents);
    }
    void println(string contents){
            printf("%s\n",contents.c_str());
    }
};
SerialDummy Serial;

使い方

これを、ユーザープログラムのソースファイルと同じ場所に置いて、ソースファイルの冒頭で

#include "pc.hpp"

を書き足します。

コンパイルは以下のようにして行います。


g++ -o test test.cpp LGFX_SDL.cpp ../../../LovyanGFX/src/lgfx/utility/*.c ../../../LovyanGFX/src/lgfx/v1/*.cpp ../../../LovyanGFX/src/lgfx/v1/misc/*.cpp  ../../../LovyanGFX/src/lgfx/v1/panel/Panel_Device.cpp ../../../LovyanGFX/src/lgfx/v1/platforms/sdl/*.cpp  -lm -lSDL2  -lSDL2_image -I../../../LovyanGFX/src -I../../../LovyanGFX/src/lgfx/v1  -L../../../LovyanGFX/src/lgfx -DLGFX_SDL  

どうでもいいこと

CMake などがよくわからないので手作業であれこれやってましたが、 本日の勉強会
https://lowleveltokyo.connpass.com/event/269268/
にて、@sat0ken さんがさくっと Clang を使って Ubuntu Linux でも簡単にコンパイルして、12日目の記事
「LovyanGFX for PC をLinuxで試す(clang利用)」
https://qiita.com/sat0ken/items/b068545b2a14e86dd661
としてました。
タッチの時間差で負けました。ギギギくやしいのお。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0