發表文章

目前顯示的是 9月, 2015的文章

pkg-config

編譯package的時候, 總是會看到--pkg-config=PKGCONFIG相關的選項。這邊就稍微研究一下pkg-config。 pkg-config這指令主要是用來搜尋安裝在系統上的libs,透過此指令列出lib的相關訊息。而libs的相關資訊則被記錄在.pc的檔案裡面。 附註: 在cross-compile的時候,編譯好的packages通常不會安裝在系統的預設目錄底下。通常都會放置在我們自訂的目錄。若是想讓pkg-config去搜尋我們放置的目錄,而不是預設的路徑。僅僅只需要修改PKG_CONFIG_PATH即可。 e.g. PKG_CONFIG_PATH=$PKG_CONFIG_PATH : /cross/x64/usr/lib/pkg 這邊以一個foo.pc作為例子,其內容如下: foo.pc: prefix=/usr/local exec_prefix=${prefix} includedir=${prefix}/include libdir=${exec_prefix}/lib Name: foo Description: The foo library Version: 1.0.0 Cflags: -I${includedir}/foo Libs: -L${libdir} -lfoo 相關指令用法如下: # 列出 cflag 以及所需的libs (prefix=/usr 輸出則為-I/usr/include/foo -lfoo) /usr/lib/pkgconfig$ pkg-config --cflags --libs foo -I/usr/local/include/foo -L/usr/local/lib -lfoo # 檢查lib版本 /usr/lib/pkgconfig$ pkg-config --libs "foo >= 1.9" Requested 'foo >= 1.9' but version of foo is 1.0.0 # 測試lib是否存在 (0表示存在;) /usr/lib/pkgconfig$ pkg-config --exists foo; echo $? 0 # 測試lib是否存在,並顯示錯誤訊息 (這對有編譯packa

unicode轉utf-8

在使用C呼叫python模組的時候發生了慘案,模組回傳了"編碼字串" \u4e09\u5929\u4e09\u591c (e.g. "三天三夜"對應"\u4e09\u5929\u4e09\u591c")。為此我只好自行轉換了。 由於系統使用utf-8編碼。所以把根據下表把unicode所在的範圍轉成對應的utf8格式即可。就可以正常顯示囉! UCS-4 編碼 UTF-8 編碼 00000000 - 0000007F 0xxxxxxx 00000080 - 000007FF 110xxxxx 10xxxxxx 00000800 - 0000FFFF 1110xxxx 10xxxxxx 10xxxxxx 00010000 - 001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 00200000 - 03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 04000000 - 7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx Example #include <stdio.h> int main() { const char *szUniStr = "\u4e09\u5929\u4e09\u591c"; printf("%s\n", szUniStr); const char szUtf8[] = { \ 0xe4, 0xb8, 0x89, \ 0xe5, 0xa4, 0xa9, \ 0xe4, 0xb8, 0x89, \ 0xe5, 0xa4, 0x9c, \ }; printf("