2013年10月24日 星期四

gcc 控制符號的可見性

在某些情況下我們會想要把一些函數或變數隱藏起來,不要讓它們出現在 symbol table 裡。


static

將全域變數或函數宣告成 local,只有該 object file 內的 function 看得到它。有 static 的話會無視 visibility 屬性宣告。


__attribute__((visibility ("hidden")))

全域變數或函數宣告預設是宣告成 global,加上 visibility 屬性後可見性設定為隱藏。編譯期間會標示成 global,但名稱會變成 .hidden function。最後連結產生 shared object 的時候該 symbol 不會出現在 dynamic symbol table,但是會在 symbol table 中出現且標示為 local。如果要做到完全隱藏,產生 shared object 以後要 strip 拔掉 symbol table。


-fvisibility=hidden

同 __attribute__((visibility ("hidden"))),不過這是從編譯器的命令列參數,等於是設定預設的 visibility。

2013年10月17日 星期四

DEB 套件 control 檔 template

Package: 
Version: 
Architecture: 
Maintainer: 
Installed-Size: 
Depends:
Pre-Depends: 
Recommends: 
Suggests: 
Breaks: 
Replaces: 
Provides: 
Section: 
Priority: 
Multi-Arch: 
Homepage: 
Description: 

2013年10月15日 星期二

hplip plugin 備用 mirror

hplip 安裝、設定印表機的時候會到 www.openprinting.org 去抓 hplip-x.xx.x-plugin.run。萬一這個網站掛了,可以到 http://hplipopensource.com/hplip-web/plugin/ 抓一樣的檔案來用。

Debian Wheezy 收錄的是 3.12.6

2013年10月4日 星期五

xboxdrv 模擬 XBOX360 手把

為了對付某些只吃 XBOX360 手把的遊戲(Runner2),我們需要 xboxdrv 將我們的 xpad 相容手把偽裝成正牌 XBOX360 手把。

$ sudo xboxdrv --silent --type xbox360 --device-by-id 046d:c21f --mimic-xpad --detach-kernel-driver

046d:c21f 是 Logitech F710 Wireless Gamepad,請自行代換其 USB device ID(用 lsusb 查)。

2013年10月1日 星期二

tsocks 掛 SOCKS proxy

雖然不是所有的網路程式都有內建 SOCKS proxy 支援,但我們可以透過 tsocks 讓任何程式走 SOCKS proxy 進行連線。

一般 distro 應該都有附,設定也只需要改 /etc/tsocks.conf、指定 SOCKS server 而已。

執行程式的時候只要在前面加個 LD_PRELOAD=/usr/lib/libtsocks.so 讓連結器優先載入 tsocks 的 shared object,就可以讓目標程式使用指定的 SOCKS proxy 連線。