kubo39's blog

ただの雑記です。

そういえば最近またgithubの草が途絶えていることにきづいた

サッカー

浦和レッズの優勝をみていた。ジュビロってこんな下手なのしかいなかったっけ?

crenv

yakketyでcrenv install 0.19.4を叩くとエラーが。

( ՞ਊ ՞) :~ $ lsb_release -sc
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
( ՞ਊ ՞) :~ $ LANG=C crenv install 0.19.4
Resolving Crystal download URL by Remote Cache ... ok
Downloading Crystal binary tarball ...
https://github.com/crystal-lang/crystal/releases/download/0.19.4/crystal-0.19.4-1-linux-x86_64.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   611    0   611    0     0    568      0 --:--:--  0:00:01 --:--:--   568
100 16.1M  100 16.1M    0     0   670k      0  0:00:24  0:00:24 --:--:-- 1248k
ok
Moving the Crystal directory ...ok
Checking if Shards already exists ... ng
Resolving Shards download URL ... ok
Downloading Shards tarball ...
https://github.com/crystal-lang/shards/archive/master.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   127    0   127    0     0    119      0 --:--:--  0:00:01 --:--:--   119
100 27519  100 27519    0     0  11741      0  0:00:02  0:00:02 --:--:-- 68285
ok
Building Shards ... /usr/bin/ld: /home/kubo39/.anyenv/envs/crenv/versions/0.19.4/embedded/lib/../lib/libyaml.a(api.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /home/kubo39/.anyenv/envs/crenv/versions/0.19.4/embedded/lib/../lib/libyaml.a(parser.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /home/kubo39/.anyenv/envs/crenv/versions/0.19.4/embedded/lib/../lib/libyaml.a(scanner.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /home/kubo39/.anyenv/envs/crenv/versions/0.19.4/embedded/lib/../lib/libyaml.a(reader.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
Error: execution of command failed with code: 1: `cc -o "/home/kubo39/.anyenv/envs/crenv/cache/0.19.4/shards-master/bin/shards" "${@}"  -rdynamic  -lyaml -lpcre -lgc -lpthread /home/kubo39/.anyenv/envs/crenv/versions/0.19.4/src/ext/libcrystal.a -levent -lrt -ldl -L/usr/lib -L/usr/local/lib`
shards build faild: /home/kubo39/.anyenv/envs/crenv/cache/0.19.4/shards-master at /home/kubo39/.anyenv/envs/crenv/plugins/crystal-build/bin/../lib/CrystalBuild/Builder/Shards.pm line 19, <DATA> line 1.

理由としてはgcc herdened https://wiki.ubuntu.com/SecurityTeam/PIE でリンク時に-pieがデフォルトonになったのが原因でcrystalのtarに同梱されてるlibyaml.aとかとリンクしようとして落ちるって感じ。

とりあえずcrystal-buildの中いじって --link-flags -no-pie をshardsのビルド時に与えて迂回してるけどこれよくない方法だよなあ…ってかんじだしどうするかね。

対応策とPros/Cons

ほんとはぜんぜん検討違いなことを言ってるかもしれない。

  • <= 0.19.4 では -link-flags -no-pie でビルド

静的ライブラリリンクは環境を意識しなくていいので楽だよね、という。gccのバージョンによっては -no-pie オプションがなかったりというのがあって厳しいかも。調べた感じGCCでは4.9以降で入ったらしく、たとえばCentOS7.xではgcc 4.8なのでだめ。

  • なんとか*.soとリンクする

実は動的リンクライブラリも同梱されているのだ、こちらは-fPICなビルドなのでリンクエラーにはならない。んじゃないかな多分。パスとか環境を意識する必要があるので利便性が下がるか。

  • tarballを差し替えてもらう…?

tarballに含まれるlib*.aがfPICつきでビルドされていないからおきるのでそれをなんとかする。

アニメ

昨日のWIXOSSをみました。ひたすら厳しい…救いはあるのか。

ブブキ・ブランキをみました。黄金ちゃんの出番はあまりなかったようにおもいます。

ろんぐらいだぁす!をみました。脚アニメですね。獣姦アニメでもありました。よい。

オカルティックナインをみました。よくわかりません。

終末のイゼッタをみました。イゼッタちゃんかわいいのでちゃんとハッピーエンドになってほしいですが。。