2017年11月14日 星期二

[轉] 編譯中的-shared和-fPIC

接著昨天的工作,絕大部分問題已經解決,現在拖到最後解決,擺在眼前的問題是:
1makefileLDFLAGS有參數-shared,導致報錯
/usr/bin/ld: md5c.o: relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
md5c.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [object] Error 1
2、去掉在LDFLAGS中添加-fPIC同樣報錯,去掉-shared,有沒有-fPIC都沒有這個報錯了,但是會有另一個報錯
//usr/lib/crt1.o: In function `_start':
(.text+0x34): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [object] Error 1
這表明沒有-shared選項,編譯器預設編譯的是一個可執行程式,但是又找不到main函數(-start是內核程式的主函數,應用程式主函數為main,是供-start調用的),看來,-shared不能去掉

那麼為什麼報錯提示會說recompile with -fPIC呢?
原來,人家說的是“recompilewith -fPIC,而不是用-fPIC連結,所以-fPIC應該添加到CPPFLAGS += -fPIC中,而非LDFLAGS。將mainservicemakefile添上這一行命令,在他用到的所有連結化物件(包括libtinyxml.a)的makefile中都添上,再編譯,就ok了。


沒有留言:

張貼留言