博主從事嵌入式Linux上的軟件開發,其中用到了不少庫。博主發現這些庫都是靜態連接的。若是有多個程序都要用到這個庫,並且這個庫又比較大的時候。這將是一個莫大的空間浪費。linux
博主對比了一下本地編譯與交叉編譯下的日誌輸出,發現有如下比較可疑的信息:ui
上面左邊76,77行,不能支持shared libraries。spa
打開 ./configure,找到對應的輸出語句:調試
可否支持,是由 can_build_shared 這個變量決定的。日誌
而 can_build_shared 在這裏有修改:ip
去 confilg.log 中搜 11262 行的輸出結果:開發
結果能夠看出 dynamic_linker 的值是 「GNU/Linux ld.so」,不是 "no",因此不是這裏影響了 can_build_shared 變量。編譯
查得另外一處影響的變量:變量
去 config.log 查得 ld_shlibs 的值爲 no:gcc
那爲何 ./configure 認爲 rsdk-linux-gcc 不支持 shared library 呢?它的判斷標準是什麼?
博主翻了好幾頁,這 ./configure 真不是人看的,沒有對縮進,並且好深的case嵌套。哎~,腦空量溢出了。
大概能夠分析出跟 host 有關係,./configue 在分析是什麼系統,根據系統來判斷 ld_shlibs 的值。
若是是這樣,極可能是我在 Makefile 中:
./configure --host=mips-linux 所致?將 "mips-linux" 改爲 "linux" 再試試。
經過打調試信息,得知是在這裏設置的 ld_shlibs 爲 no 的:
與這個case相關的代碼好大,好難看出究竟是什麼條件了。查得與 host_os 變量相關。
在調試信息中打印 host_os 變量的值,爲 "elf" 。爲何是這個?而 host_os 在這裏賦值:
從 config.log 中得知 ac_cv_host = mips-unkonwn-elf 。
ac_cv_host 來源:
這個由 config.sub 與 host_alias 所得。而 host_alias 來自於:
能夠從 L984 得知,host_alias 來自於咱們 ./configure 時傳的 --host=mips 所得。
理一下思路:
咱們轉入了一個 --host=mips-linux,configure 執行 sh config.sub mips-linux,返回的結果是 "mips-unkonwn-elf",host_os 從中提取出 "elf",而後就不對了。
那 --host=?? 得看 config.sub 如何轉換。