2010-07-26 64 views
1

LDD -v APPNAMEAPPNAME步驟:/lib/libc.so.6:版本未找到(通過應用程序的名字需要)`GLIBC_2.8'

linux-gate.so.1 => (0x00949000) 
libpthread.so.0 => /lib/libpthread.so.0 (0x00cea000) 
libm.so.6 => /lib/libm.so.6 (0x00a83000) 
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00ba1000) 
libc.so.6 => /lib/libc.so.6 (0x0015c000) 
/lib/ld-linux.so.2 (0x0012f000) 
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00b93000) 

Version information: 
appname: 
    libm.so.6 (GLIBC_2.0) => /lib/libm.so.6 
    libc.so.6 (GLIBC_2.8) => not found 
    libc.so.6 (GLIBC_2.2) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.3.2) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.7) => not found 
    libc.so.6 (GLIBC_2.4) => /lib/libc.so.6 
    libc.so.6 (GLIBC_PRIVATE) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.1) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.2.4) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.3) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.0) => /lib/libc.so.6 
    libstdc++.so.6 (CXXABI_1.3) => /usr/lib/libstdc++.so.6 
    libstdc++.so.6 (GLIBCXX_3.4.5) => /usr/lib/libstdc++.so.6 
    libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib/libstdc++.so.6 
    libpthread.so.0 (GLIBC_2.2) => /lib/libpthread.so.0 
    libpthread.so.0 (GLIBC_2.1) => /lib/libpthread.so.0 
    libpthread.so.0 (GLIBC_2.0) => /lib/libpthread.so.0 
    libpthread.so.0 (GLIBC_2.3.2) => /lib/libpthread.so.0 
/lib/libpthread.so.0: 
    ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2 
    ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2 
    ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2 
    libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.1) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.3.2) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.2) => /lib/libc.so.6 
    libc.so.6 (GLIBC_PRIVATE) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.0) => /lib/libc.so.6 
/lib/libm.so.6: 
    ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2 
    libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.0) => /lib/libc.so.6 
/usr/lib/libstdc++.so.6: 
    ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2 
    libgcc_s.so.1 (GCC_4.2.0) => /lib/libgcc_s.so.1 
    libgcc_s.so.1 (GLIBC_2.0) => /lib/libgcc_s.so.1 
    libgcc_s.so.1 (GCC_3.3) => /lib/libgcc_s.so.1 
    libgcc_s.so.1 (GCC_3.0) => /lib/libgcc_s.so.1 
    libc.so.6 (GLIBC_2.3.2) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.4) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.1) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.3) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.0) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.2) => /lib/libc.so.6 
/lib/libc.so.6: 
    ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2 
    ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2 
    ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2 
/lib/libgcc_s.so.1: 
    libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.2.4) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.4) => /lib/libc.so.6 
    libc.so.6 (GLIBC_2.0) => /lib/libc.so.6 

appname是在Ubuntu 9.10編譯,試圖運行編譯產品在Centos 5上。

我的猜測是Centos5的/lib/libc.so.5提供了版本GLIBC_2.4,但是appname調用了GLIBC_2.8。

但這是有趣的事情。直到我開始鏈接到boost的系統庫時,這個問題才發生。之前它只是boost的線程庫,但現在我需要線程和系統。 我在那個Ubuntu系統上編譯了boost。 我現在要試着在CentOs上編譯提升,並引入生成的.a文件。 我鏈接到boost .a文件btw。

問題,如何減少這些類型的頭痛與版本? 是否有任何使用任何技巧,比如設置一個較低庫版本的chroot環境,在這個環境中編譯產品?顯然,在較新的linux發行版上編譯很快會使您的產品即使是稍微老一點的linux也不兼容。 人們如何運輸兼容性不錯的二進制文件? 是的,我可以做靜態鏈接,但libc不能靜態鏈接正確?

+0

在CentOs上編譯boost並將.a文件引入Ubuntu沒有幫助。 當我在Ubuntu上編譯並在CentOs上運行時,我仍然得到: appname:/lib/libc.so.6:未找到'GLIBC_2.8'版本(appname需要) – Mike 2010-07-26 20:36:22

回答

2

使用chroot環境是這樣做的一種方式,但您並不需要所有這些工作。您可以在某處設置較舊的SDK參考版本(包括libc和其他版本),然後強制gcc鏈接該目錄,而不是標準系統目錄中的庫和標頭。 GCC的選擇是:-isystem,-isysroot--sysroot

作爲一個例子,蘋果的gcc經常這樣做,根據您定位的操作系統版本鏈接到各種SDK版本。

相關問題