給未來的裕翔
從windows轉linux的其中一個陣痛就是
我的中文都變亂碼啦~
一開始當然只能像丟棄嬰兒一樣
一個個難過的道別 嗚嗚~
後來知道, 每個檔案都有自己的編碼
就是常聽到的big5, utf8這種
而我在windows的檔案編碼是big5
linux預設是utf8
可以利用linux的iconv指令來轉碼
iconv -f big5 -t utf8 target-file
這樣就會秀在螢幕上
如果像要存回檔案裡
iconv -f big5 -t utf8 target-file -o target-file
Showing posts with label glibc-common. Show all posts
Showing posts with label glibc-common. Show all posts
Sunday, July 18, 2010
Sunday, April 18, 2010
static library & shared library嘗試
給未來的裕翔
剛從"工程師碎碎唸"這篇部落格
看到static library和shared library的實作介紹
首先準備三個檔案
main.c
#include "myHeader.h"
int main()
{
myFunc();
return 0;
}
myHeader.h
void myFunc();
function.c
#include <stdio.h>
void myFunc()
{
printf("this is myFunc speaking\n");
}
gcc -c main.c function.c
ar crv myLib.a function.o
(c: create r: insert with replace v: verbose)
gcc -o main main.o myLib.a
以上是static library
gcc -o myLib.so -shared function.c
gcc -o main main.o myLib.so
./main
./main: error while loading shared libraries: myLib.so: cannot open shared object file: No such file or directory
就算編譯成功, 執行期間還是到預設幾個位置尋找shared library
方便起見, 把myLib.so複製到/lib底下
cp myLib.so /lib
./main
./main: error while loading shared libraries: /lib/myLib.so: cannot restore segment prot after reloc: Permission denied
這是SELinux的問題, 必須修改檔案的type
chcon -t textrel_shlib_t myLib.so
cp -a myLib.so /lib
注意, 一定要加-a, 否則myLib.so複製過去後, type會被自動改掉
./main
成功!
以上是shared library
如果是使用static library
ldd main只有預設的三行
如果使用shared library
ldd main則會多一行我們自己的myLib.so
linux-gate.so.1 => (0x00e3a000)
myLib.so => /lib/myLib.so (0x00521000)
libc.so.6 => /lib/libc.so.6 (0x00364000)
/lib/ld-linux.so.2 (0x00342000)
剛從"工程師碎碎唸"這篇部落格
看到static library和shared library的實作介紹
首先準備三個檔案
main.c
#include "myHeader.h"
int main()
{
myFunc();
return 0;
}
myHeader.h
void myFunc();
function.c
#include <stdio.h>
void myFunc()
{
printf("this is myFunc speaking\n");
}
gcc -c main.c function.c
ar crv myLib.a function.o
(c: create r: insert with replace v: verbose)
gcc -o main main.o myLib.a
以上是static library
gcc -o myLib.so -shared function.c
gcc -o main main.o myLib.so
./main
./main: error while loading shared libraries: myLib.so: cannot open shared object file: No such file or directory
就算編譯成功, 執行期間還是到預設幾個位置尋找shared library
方便起見, 把myLib.so複製到/lib底下
cp myLib.so /lib
./main
./main: error while loading shared libraries: /lib/myLib.so: cannot restore segment prot after reloc: Permission denied
這是SELinux的問題, 必須修改檔案的type
chcon -t textrel_shlib_t myLib.so
cp -a myLib.so /lib
注意, 一定要加-a, 否則myLib.so複製過去後, type會被自動改掉
./main
成功!
以上是shared library
如果是使用static library
ldd main只有預設的三行
如果使用shared library
ldd main則會多一行我們自己的myLib.so
linux-gate.so.1 => (0x00e3a000)
myLib.so => /lib/myLib.so (0x00521000)
libc.so.6 => /lib/libc.so.6 (0x00364000)
/lib/ld-linux.so.2 (0x00342000)
Saturday, March 20, 2010
shared library測試
給未來的裕翔
當我對 facedetect.cpp編譯後的object檔做連結時
g++ -o facedetect facedetect.o -L/usr/lib -lhighgui
ldd facedetect
linux-gate.so.1 => (0x00da3000)
libhighgui.so.4 => not found
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x07613000)
libm.so.6 => /lib/libm.so.6 (0x00a38000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x07442000)
libc.so.6 => /lib/libc.so.6 (0x0089e000)
libcv.so.4 => not found
libcxcore.so.4 => not found
libpthread.so.0 => /lib/libpthread.so.0 (0x00a1c000)
/lib/ld-linux.so.2 (0x0087c000)
我只決定一個libhighgui.so, 其它是誰決定的?
系統? 還是libhighgui.so? 因為除了libhighgui.so
libcv.so和libcxcore.so也都是opencv裡面的shared library
目前不知道是誰決定的
有些shared library的後面是接not found
既然沒找到, 為什麼可以編譯?
改成g++ -o facedetect facedetect.o -L/usr/lib -lhighgui -lcv
ldd查看依舊是十個, 只有顯示順序改變
後來發現, 其實我路徑也給錯了
應該是要-L/usr/local/lib
可是剛兩次連結也都通過了
要通過跟路徑沒關?
g++ -o facedetect facedetect.o -lhighgui -lcv
果然通過! 傻眼...... 那我現在該怎麼辦?
無可奈何, 只好先把某些shared library顯示not found的問題解決
vi /etc/ld.so.conf
新增/usr/local/lib
改完之後也不需要重新編譯或連結
直接ldd就可以發現每個shared library都找到了
結論: 這次真是幾乎毫無結論的測試......
當我對 facedetect.cpp編譯後的object檔做連結時
g++ -o facedetect facedetect.o -L/usr/lib -lhighgui
ldd facedetect
linux-gate.so.1 => (0x00da3000)
libhighgui.so.4 => not found
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x07613000)
libm.so.6 => /lib/libm.so.6 (0x00a38000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x07442000)
libc.so.6 => /lib/libc.so.6 (0x0089e000)
libcv.so.4 => not found
libcxcore.so.4 => not found
libpthread.so.0 => /lib/libpthread.so.0 (0x00a1c000)
/lib/ld-linux.so.2 (0x0087c000)
我只決定一個libhighgui.so, 其它是誰決定的?
系統? 還是libhighgui.so? 因為除了libhighgui.so
libcv.so和libcxcore.so也都是opencv裡面的shared library
目前不知道是誰決定的
有些shared library的後面是接not found
既然沒找到, 為什麼可以編譯?
改成g++ -o facedetect facedetect.o -L/usr/lib -lhighgui -lcv
ldd查看依舊是十個, 只有顯示順序改變
後來發現, 其實我路徑也給錯了
應該是要-L/usr/local/lib
可是剛兩次連結也都通過了
要通過跟路徑沒關?
g++ -o facedetect facedetect.o -lhighgui -lcv
果然通過! 傻眼...... 那我現在該怎麼辦?
無可奈何, 只好先把某些shared library顯示not found的問題解決
vi /etc/ld.so.conf
新增/usr/local/lib
改完之後也不需要重新編譯或連結
直接ldd就可以發現每個shared library都找到了
結論: 這次真是幾乎毫無結論的測試......
Subscribe to:
Posts (Atom)