Monday, December 21, 2009

compiler的問題

最近有遇到compiler的問題

廠商有提供幾個library給我們使用,libcommon.a

而我自己寫了幾個測試程式要來測試這個library能不能使用。

當我寫完以後要compiler成執行檔結果就發生底下的問題

#gcc -O3 -I../Include -c Testlib.c
#gcc -L../lib -lcommon Testlib.o -o Testlib
Testlib.o: In function `main':
Testlib.o(.text+0x44): undefined reference to `Lib_Init'
Testlib.o(.text+0x7c): undefined reference to `Lib_Write'
Testlib.o(.text+0x98): undefined reference to `Lib_UnInit'
collect2: ld returned 1 exit status


疑~~~奇怪了,明明Lib_Init,Lib_Write和Lib_Uninit都在libcommon.a裡面啊??

上網找尋gcc的使用手冊
-l library
Search the library named library when linking. (The second alternative with the library as a separate argument is only for POSIX compliance and is not recommended.)

It makes a difference where in the command you write this option; the linker searches and processes libraries and object files in the order they are specified. Thus, `foo.o -lz bar.o' searches library `z' after file foo.o but before bar.o. If bar.o refers to functions in `z', those functions may not be loaded.

喔~~真相大白,原來gcc使用library也有順序可言喔!!

只要將
gcc -L../lib -lcommon Testlib.o -o Testlib
改成
gcc Testlib.o -L../lib -lcommon -o Testlib
這樣就可以了。

就以我這個例子來說,Testlib.o裡面有參考到libcommon.a裡面所提供的function,所以要放在libcommon.a之前,這樣gcc就會把undefine的symbol先找出來再往後找尋library。

Saturday, December 5, 2009

Google 開放DNS 的查詢

看到網路新聞,Google開放它們自己的DNS Server給全世界。

以前在台灣網路剛盛起,台灣只有一個DNS Server可供查詢,那就是中華電信
的DNS Server 168.95.1.1,現在又多出一個選擇

8.8.8.8
8.8.4.4

以上是Google開放的DNS,上面的IP選的真的很好,也很好記。

Monday, November 2, 2009

如何從Linux系統抓MAC Address

在Linux 平台上面,可以使用ioctl的方式來得知網路的的MAC Address.

-----------------------
#include 

#include /* for strncpy */

#include
#include
#include
#include
#include

int
main()
{
int fd;
struct ifreq ifr;

fd = socket(AF_INET, SOCK_DGRAM, 0);

ifr.ifr_addr.sa_family = AF_INET;
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);

ioctl(fd, SIOCGIFHWADDR, &ifr);

close(fd);

/* display result */
printf("%.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n",
(unsigned char)ifr.ifr_hwaddr.sa_data[0],
(unsigned char)ifr.ifr_hwaddr.sa_data[1],
(unsigned char)ifr.ifr_hwaddr.sa_data[2],
(unsigned char)ifr.ifr_hwaddr.sa_data[3],
(unsigned char)ifr.ifr_hwaddr.sa_data[4],
(unsigned char)ifr.ifr_hwaddr.sa_data[5]);

return 0;
}


Ref http://www.geekpage.jp/en/programming/linux-network/get-macaddr.php

Tuesday, June 23, 2009

DOS底下的錯誤訊息導向

Redirection of Standard-Error


make all 2> log.txt

這樣就可以將錯誤訊息寫入log.txt檔案裡面。

Thursday, April 30, 2009

寶寶要出生了

我老婆懷孕了,最近都在開始準備囤積未來的東西。像是濕紙巾,尿布...等等。每天都去家樂福
看一下有沒有特價的商品,如果有特價的商品,就趕快先買起來放。

這幾天剛好有看到濕紙巾有在特價,一包39元,平常都是58元。看到這樣,我一口氣就買了24包,
先買起來放,不然以後要買,就要花大把的銀子了!!^^

Wednesday, February 25, 2009

BusyBox 在Serial Console底下不提示login訊息

在Busybox Serial Console底下,在/etc/inittab 裡面加上底下這一行

::respawn:/sbin/getty -n -L ttySA0 115200 vt100 -n -l /bin/sh


系統就不會Show出要你輸入使用者帳號與密碼了!!

Monday, February 9, 2009

warning: missing sentinel in function call

warning: missing sentinel in function call

因為NULL不是一個正確的字元結束( terminated )資料型態,所以就會產生warning: missing sentinel in function call
#include 

int main() {
execl("/bin/ls", "ls", "-l", NULL);
return 0;
}

為了要避險這樣的情形產生。

#include

int main() {
execl("/bin/ls", "ls", "-l", (char *)NULL);
return 0;
}
這樣gcc就不會產生
warning: missing sentinel in function call