とりあえず今日はここまで。多少は進められたかな…
OpenBSD(uaa@), Ham(JG1UAA), Ingress(Lv14, RES), Japanese(Sagamihara-city, Kanagawa)
Another side: https://social.tchncs.de/@uaa
npub1rarr265r9f9j6ewp960hcm7cvz9zskc7l2ykwul57e7xa60r8css7uf890
Messages from this Mastodon account can read via mostr.pub with npub1j3un8843rpuk4rvwnd7plaknf2lce58yl6qmpkqrwt3tr5k60vfqxmlq0w
Archだったら新し目のclang入ってるだろうし、これでビルドできるかどうかを判断材料にすれば良いんだろうか?
-fvisibility=defaultもしくはprotectedならOpenDHTのtoolsのビルドは通る。もともとhiddenだった場合、default/protectedのどちらへ置き換えるのが適切なんだろう。見えないシンボルに上書きしようが何しようが問題は無いけど、見えてしまっているシンボルに上書きして意図しない動作を起こされるくらいなら、上書きを禁止してライブラリの動作を守る側に振っておく方が良いのかなという気はする。
ConoHaはOpenBSD使えるのか。とはいえGMO系は避けたいんだよな…他の選択肢を探そう。
#define OPENDHT_IMPORT __attribute__ ((visibility ("default"), type_visibility ("default")))
#define OPENDHT_EXPORT __attribute__ ((visibility ("default"), type_visibility ("default")))
#define OPENDHT_HIDDEN __attribute__ ((visibility ("hidden"), type_visibility("hidden")))
こいつを仕込んだところで改善しないか…それにCではtype_visibility使うなって怒られるし。
attributeのtype_visibilityは今のところclang専用。https://libcxx.llvm.org/DesignDocs/VisibilityMacros.html
問題がこれがいつごろから生えてきたかってことになるんだが…
clang-13.0には無い https://releases.llvm.org/13.0.0/tools/clang/docs/AttributeReference.html
clang-14.0にも無い
https://releases.llvm.org/14.0.0/tools/clang/docs/AttributeReference.html
clang-15.0には有る
https://releases.llvm.org/15.0.0/tools/clang/docs/AttributeReference.html
ってことはclang-13.0と16.0だとビルドによる結果が変わる可能性はあるのかもしれない。
あれなんなんでしょうかね、何もしてないのにYouTubeが再生速度2倍になってるの。リロードとかすると治るんだけど…いきなりアレを食らうとちょっと焦る。
Symbol Visibility in OpenEXR https://openexr.com/en/latest/SymbolVisibility.html
ん?この表??
Slackware-15.0はclang-13, OpenBSD-current(7.5beta)はclang-16。
どっちも-fvisibility=hiddenは効いていて、Slackwareならopendht/toolsのビルドは通る。
特にこのオプション/attribute絡みのバグって無い気がするんだけど…なんかあるのかなあ。
(でもSlackware-15.0/i686上ではclangでも問題なくビルドできてたような)
OpenBSD-ports化したOpenDHT、付属toolsのビルドだけでなくmrefdのビルドでもリンクがうまくいかない(no referenceだかなんだかのエラーが出る)という問題で頭抱えてるんだけど…
openbsd-current-vm# diff configure.ac~ configure.ac
22c22
< [CXXFLAGS="${CXXFLAGS} -O3 -Wno-deprecated -pedantic-errors -fvisibility=hidden"])
---
> [CXXFLAGS="${CXXFLAGS} -O3 -Wno-deprecated -pedantic-errors -fvisibility=default"])
openbsd-current-vm#
この修正でtoolsのビルドが通ってる。fvisibilityの指定、Linuxでも特に変わらないはずだったよな…?
RAM2~4G、ストレージ100GB、CPUコア2~4個、OpenBSDを載せられる\1k以下/月の国内VPSなんてそうそう無いよねえ…
VPSのメモリを増やすのは簡単じゃないけど、swap増やすのはもっと簡単じゃないかも。多分起動時にあれこれ動くのでmrefd殺されてる気がする。OpenBSDもカーネルのリンクし直しが最初に走るし…
^[0-9]?[A-Z]{1,2}[0-9]{1,2}[A-Z]{1,4}(()|(/[A-Z0-9]{1,3}|-[A-Z0-9]))(()|([ ]*[A-Z]))$
^[0-9]?[A-Z]{1,2}[0-9]{1,2}[A-Z]{1,4}(($)|(/[A-Z0-9]{1,3}$|-[A-Z0-9]$)|([ ]*[A-Z]$)|((/[A-Z0-9]{1,3}|-[A-Z0-9])[ ]*[A-Z]$))
…これでいいのかなあ?
分解するとこうなるのか。
^[0-9]?[A-Z]{1,2}[0-9]{1,2}[A-Z]{1,4}
(()|(/[A-Z0-9]{1,3}|-[A-Z0-9]))
(()|([ ]*[A-Z]))
$
で、()の部分が嫌なんだって、POSIX regex。流石にこれは4通りのパターンに展開しないとダメ?
clientRegEx = std::regex("^[0-9]?[A-Z]{1,2}[0-9]{1,2}[A-Z]{1,4}(()|(/[A-Z0-9]{1,3}|-[A-Z0-9]))(()|([ ]*[A-Z]))$", std::regex::extended);
こいつが
libc++abi: terminating with uncaught exception of type std::__1::regex_error: An empty regex is not allowed in the POSIX grammar.
で引っかかるんだけどどう直したもんか…