メモの日々


2015年12月15日(火) [長年日記]

  • Androidのアプリを作る仕事を少ししていたのだけれど、それはすぐに終わってしまって再びC++に戻る。
  • CentOS 7.2がリリースされていた。

[windows] Aeroスナップを有効にする

まだWindows 7を使っている。Aeroスナップ機能はずっとオフにしていたのだけれど、最近(!)マルチモニタを使うようになり、キーボード操作でモニタ間のウィンドウ移動をしたくなり、そのためにはAeroスナップを有効にしなければならないようだったので、有効にした。そのやり方が難しかったのでメモ。次を設定する。

  • [コントロールパネル]→[コンピューターの簡単操作センター]→[キーボードを使いやすくします]の画面の一番下にある「ウィンドウが画面の端に移動されたとき自動的に整列されないようにします」というチェックボックスのチェックを外す

こうすると、[Shift]+[Windows]+[→]でアクティブウィンドウのモニタ間移動ができるようになった。


2015年12月20日(日) [長年日記]

[dev][howto][c][c++] GCCで一部のライブラリだけ静的にリンクする

リンクするライブラリの一部だけを静的にリンクすることは、GCCの機能だけではできないみたい。-Wl オプション経由でldの -Bstatic と -Bdynamic オプションを使うと実現できた。

CentOS 7上で試す。デフォルトではlibboost_filesystem.so.1.60.0が動的リンクされている。

% g++ hello.cpp -I/home/kenichi/boost_1_60_0/include -L/home/kenichi/boost_1_60_0/lib \
> -lboost_filesystem -lboost_system

% ldd a.out
        linux-vdso.so.1 =>  (0x00007ffc6ede3000)
        libboost_filesystem.so.1.60.0 => /home/kenichi/boost_1_60_0/lib/libboost_filesystem.so.1.60.0 (0x00007f1384f75000)
        libboost_system.so.1.60.0 => /home/kenichi/boost_1_60_0/lib/libboost_system.so.1.60.0 (0x00007f1384d70000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f1384a62000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f1384760000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f1384549000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f1384188000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f1383f6c000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f1383d63000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f138518f000)

libboost_filesystemに対して -Wl,-Bstatic、それ以外には -Wl,-Bdynamic を指定すると、libboost_filesystem.so.1.60.0は動的リンクされなくなる。

% g++ hello.cpp -I/home/kenichi/boost_1_60_0/include -L/home/kenichi/boost_1_60_0/lib \
> -Wl,-Bstatic -lboost_filesystem -Wl,-Bdynamic -lboost_system

% ldd a.out
        linux-vdso.so.1 =>  (0x00007ffd0b1cb000)
        libboost_system.so.1.60.0 => /home/kenichi/boost_1_60_0/lib/libboost_system.so.1.60.0 (0x00007f335878b000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f335847c000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f335817a000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f3357f64000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f3357ba2000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3357986000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f335777e000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f3358990000)