GCC hardened
そもそも静的リンクライブラリのビルド方法を変えたら対処できるものなのだろうか。
こういうファイルを用意して実験する。
- staticlib.c
#include <stdio.h> int static_func() { printf("This is a static library demo.\n"); return 0; }
- main.c
#include <stdio.h> int static_func(); int main() { static_func(); }
GCC 6.2ではとくに意識せずにリンク可能となっているようだ。
( ՞ਊ ՞) :~/dev/pie $ gcc -c staticlib.c ( ՞ਊ ՞) :~/dev/pie $ ar r libstatic.a staticlib.o ar: libstatic.a を作成しています ( ՞ਊ ՞) :~/dev/pie $ gcc main.c -lstatic ( ՞ਊ ՞) :~/dev/pie $ ./a.out This is a static library demo.
失敗するケースをみたい。
( ՞ਊ ՞) :~/dev/pie $ gcc -c -fno-pic staticlib.c ( ՞ਊ ՞) :~/dev/pie $ ar r libstaticlib.a staticlib.o ( ՞ਊ ՞) :~/dev/pie $ LANG=C gcc main.c -lstaticlib /usr/bin/ld: ./libstaticlib.a(staticlib.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
そういうわけで古いGCCであれば-fPICつきで、新しいものであれば単にビルドしなおせば問題なさそうだ。
ビール
飲ん兵衛が渋谷にきたので飲むことになった。写真はキルケニー。
飲んべえがきたのでグリフォンに pic.twitter.com/CKQT1NH2Dr
— 黄前久美子さんと高坂麗奈さんの距離感 (@shitsyndrome) 2016年10月30日
この後もう一軒いった。
東京タワー
認知症なのでいつのまにか東京タワーまで歩いていた。
— 黄前久美子さんと高坂麗奈さんの距離感 (@shitsyndrome) 2016年10月30日
展望台にきた pic.twitter.com/4s2IGJTOKC
— 黄前久美子さんと高坂麗奈さんの距離感 (@shitsyndrome) 2016年10月30日
わりと夜遅くまでやっているのね。