我正在爲beaglebone黑色設備交叉編譯共享庫(miniweb)。當我沒有優化編譯時,我沒有任何問題。不過,如果我編譯任何優化(即-O3
)我得到的嘗試運行我的程序時,以下幾點:啓用編譯器優化時找不到glibc
./myprogram: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.15' not found (required by /usr/lib/libminiweb.so)
我的第一個問題,爲什麼會允許優化突然引起我的程序依賴於這個庫?優化功能被禁用時,庫中是否靜態地包含內容?
如何確定交叉編譯器使用的c庫版本?我已經在兩個系統上運行以下命令ldd --version
:
桌面:
$ ldd --version
ldd (Ubuntu EGLIBC 2.19-0ubuntu6.6) 2.19
Copyright (C) 2014 Free Software Foundation, Inc.
beaglebone:
ldd --version
ldd (Debian EGLIBC 2.13-38+deb7u1) 2.13
Copyright (C) 2011 Free Software Foundation, Inc.
很顯然,我有庫是過時的,但你可以看到我的系統報告使用eglibc
而不是glibc
?
我的交叉編譯庫如何依賴於glibc
?也許在我的桌面上運行ldd
並不是我交叉編譯器使用的庫的準確反映?
如何找到我的交叉編譯器正在使用哪個c庫?
它看起來像圖書館住在這裏'在/ usr/ARM-Linux的gnueabihf/lib目錄/ libc.so.6'但我怎麼能知道它是什麼版本? – dtmland
@dtmland'strings /usr/arm-linux-gnueabihf/lib/libc.so.6 | grep'GNU C Library。* version''。 –
太棒了! 'GNU C Library(Ubuntu EGLIBC 2.19-0ubuntu2)穩定版本2.19,由Roland McGrath等人編寫' – dtmland