kubo39's blog

ただの雑記です。

徘徊する狂人

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つきで、新しいものであれば単にビルドしなおせば問題なさそうだ。

ビール

飲ん兵衛が渋谷にきたので飲むことになった。写真はキルケニー。

この後もう一軒いった。

東京タワー

認知症なのでいつのまにか東京タワーまで歩いていた。

わりと夜遅くまでやっているのね。