2013年8月30日 星期五

LD(linker)

在使用ld(linker)時,遇到問題(undefined reference to 'printf')
其正確的操作步驟:
1.gcc -c sample.c
2.ld -m elf_i386 --dynamic-linker /lib/ld-linux.so.2 -lc sample.o -e main
其中option 有-m --dynamic-linker -lc -e
(--dynamic-linker=>-I)
(ld-linux.so.2 is linux's dynamic loader.)
解決過程:
linker error:undefined reference to 'printf'

很明顯地,就是指找不到printf的function name.
而在使用gcc 直接產生卻可以成功地.
所以,必定在用gcc時預設了defalut make file.

法1.
找到default make file.並引入

法2.
自己撰寫printf的library並加入

法3.
找到library path(/usr or /usr/lib)並引入
即"編譯時加入額外函式庫連結的方式"
-l :是『加入某個函式庫(library)』的意思,
c :則是 libc.so 這個函式庫,其中, lib 與副檔名(.a 或 .so)不需要寫
-e:則是指出其程式的進入點.
--dynamic-linker /lib/ld-linux.so.2 :以動態linker來找到其library.

故若想要直接下command去做linker的動作時,你就必須自己去查萁設定(是static link or dynmic-link 、 library path 及程式進入點 -e main等設定

但最後,仍然出現Segmentation fault

參考:
第二十二章、軟體安裝:原始碼與 Tarball 
Linker Error: Undefined Reference To 'printf'


沒有留言:

張貼留言