查libevent不能編譯出動態庫問題

博主從事嵌入式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 如何轉換。

相關文章
相關標籤/搜索