労
相変わらずAWS LambdaとCloudWatchLogsで消耗していた。AWSのドキュメントはほんとうにだめ。
同期に setenforce 0 を伝授した。
D言語
GCC hardennd対応は dmd.confに -g -fPIC -defaultlib=libphobos2.so
を足せばよかった。
perlとD言語
Perlは拡張をCPPの独自拡張?であるXSで書くのでC言語以外で拡張モジュールを書くのがむずかしい。
それでも他言語でやれないことはなくて、共有リンクライブラリを FFI::Raw
のように実行時にdlopen(3)する形でやればよい。
先に環境
( ՞ਊ ՞) :~ $ perl -V:version version='5.14.4'; ( ՞ਊ ՞) :~ $ ldc2 -version | head -1 LDC - the LLVM D compiler (1.0.0): ( ՞ਊ ՞) :~ $ lsb_release -c Codename: yakkety ( ՞ਊ ՞) :~ $ cat /proc/version Linux version 4.8.0-26-generic (buildd@lgw01-58) (gcc version 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12) ) #28-Ubuntu SMP Tue Oct 18 14:39:52 UTC 2016
- perl側
use strict; use warnings; use FFI::Raw; my $adder = FFI::Raw->new( 'libadder.so', 'adder', FFI::Raw::int, # 戻り値 FFI::Raw::int, # 引数1 FFI::Raw::int # 引数2 ); print $adder->call(1, 1) . "\n"; #=> 2
- D言語側
extern(C) int adder(int a, int b) { return a + b; }
しかしひとつ問題があって、 -sharedつきでビルドをするとD言語自体のライブラリとのリンクを共有リンクライブラリと行ってしまう。
$ ldd libadder.so # LDCを使っているのはDMDはGCC hardened対応のため-defaultlib=libphobos2.soを与えているから linux-vdso.so.1 => (0x00007ffd78f6e000) libdruntime-ldc.so.71 => /usr/lib/x86_64-linux-gnu/libdruntime-ldc.so.71 (0x00007ff37aed5000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff37ab0e000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff37a805000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff37a5e7000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ff37a3df000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff37a1d9000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff379fc2000) /lib64/ld-linux-x86-64.so.2 (0x000056322ba25000)
静的リンクライブラリは-fPIC前提でないためなのかわからないが、とにかくデフォルトの挙動はこうなってしまう。
アニメ
アイカツスターズ!をみました。まひるちゃん回、かな?よさです。
フリップフラッパーズをみました。演出がこわかったですがハッピーに終わるかんじでよかった。
レガリアをみました。ハッピーエンドになってくれたのむ〜〜〜
競女をみました。極めて頭のおかしいアニメだ(褒めてる)
ガーリッシュナンバーをみました。水着回でした、勝ったなガハハw・・・