All Posts

全ての記事をそのまま表示している。

とても重くなってしまっているかもしれない。

CMakeでC++17が有効にならない

問題

CMake で set_property(TARGET hoge PROPERTY CXX_STANDARD 17) としても

CMake Error at CMakeLists.txt:16 (add_executable):
  CXX_STANDARD is set to invalid value '17'

というエラーが出る。

原因

ppaから入れたCMakeのバージョンが古かった。

CMake 3.8 以上でないと PROPERTY CXX_STANDARD を17にすることができない。

解決法

CMakeをアップデートする。

CMakeLists.txt に cmake_minimum_required(VERSION 3.8) を追加する。

参考

CXX_STANDARD — CMake 3.7.2 Documentation

CXX_STANDARD — CMake 3.8.2 Documentation



Bucklescriptで書いたお絵かきプログラム

前に書いたプログラムがそのままになっていたので供養。ソースコードはは ここ にある。

解説

デスクトップとブラウザ上で同じように動くグラフィカルなプログラムを作って見たかったので作った。

やりたいことはできた。

絵を描くアルゴリズムは 前にpythonで実装したもの を関数型っぽく書き直したものを使った。 そのためこのリポジトリの README に貼ってある画像はすべて作れるはずだが、 さすがに時間が無いので作り直しはしていない。



OpenGL 関係のライブラリが壊れたときの対処

問題

glew とか GLFW とか NVidia のドライバとかを一通りインストールしたにもかかわらず OpenGL の hello world プログラムがコンパイルできない。

原因

なぜか知らないがリンクに必要なオブジェクトファイルが削除され、シンボリックリンクをたどった先が存在しないファイルになっていた。

解決法

dpkg -S コマンドでどのオブジェクトファイルがどのパッケージでインストールされたかを確認して、そのパッケージを sudo apt install --reinstall する。

例えば

$ dpkg -S /usr/lib/x86_64-linux-gnu/mesa/libGL.so
libgl1-mesa-dev:amd64: /usr/lib/x86_64-linux-gnu/mesa/libGL.so

となる。



octave でつまづいたところ

octave の本質的でない部分についてのメモ。

問題 / 疑問 解決法 / 答え 備考
立ち上がったグラフウィンドウが消せない close Manipulation of Plot Windows
グラフの軸の縮尺が等しくない axis("equal") Axis Configuration
同じグラフに複数回プロットしたい hold on Manipulation of Plot Windows
今読み込んでいる変数を表示させたい whos Status of Variables
for を回している変数でインデックスを取れない int32 にキャストする range が double 型の値を返すのが原因
Ranges
Integer Data Types
endendforendif とでなにか違うのか なにも違わない すべて end でも構わないが、使い分けたほうがいい
Statements
org-babel で関数を定義しようとするとエラーが出る src block に :session をつける インタラクティブモードでない場合、ファイル内と同じ名前の関数しか定義できない
Function Files


Autoloading failed to define function … が出る

問題

emacs でいつも使っているキーボードバインディングを使おうとすると Autoloading failed to define function HOGE と出て実行できない。

原因

パッケージのアップデートで HOGE 関数の名前が変更されていた。

解決法

呼び出す関数の名前を変える。

備考

定義されていない関数を呼び出した場合、普通は void-function HOGE というおなじみのエラーが表示されるのですぐ分かるが、今回のエラーは初めて見たので解決に時間がかかった。

今まで見なかったこのエラーが出た原因は HOGE のキーボードバインディングを use-package で定義していたことにあった。

(use-package package-name
  :bind
  (:map global-map
        ("KEY" . HOGE)))

とすると、 KEY を押したときに HOGE が autoload される。その結果エラーメッセージが見慣れないものになる。