我想分發我的程序作爲二進制文件,而不是源代碼格式。我有兩個測試系統:一個較舊的Linux(帶有glibc 2.10的openSUSE 11.2)和一個最新的Linux(帶有glibc 2.15的LinuxMint 13)。現在,當我編譯LinuxMint系統上我的節目用glibc 2.15,然後嘗試用glibc 2.10啓動的openSUSE系統上的二進制文件,我得到以下兩個錯誤:瞭解glibc
./a.out: /lib/libc.so.6: version 'GLIBC_2.15' not found (required by ./a.out)
./a.out: /lib/libc.so.6: version 'GLIBC_2.11' not found (required by ./a.out)
這到底是怎麼迷惑我,這是爲什麼我在這裏也得到「glibc 2.11 not found」錯誤嗎?我希望程序現在需要glibc 2.15,因爲它已經用glibc 2.15編譯過了。爲什麼程序也在尋找glibc 2.11?這是否意味着我的程序將在兩個glibc版本上運行,即2.15和2.11?所以它至少需要2.11?或者在任何情況下都需要2.15?
另一個問題:這個假設是否正確,glibc向上兼容但不是向下?例如。是一個用glibc 2.10編譯的程序,可以保證與任何未來版本的glibc完美搭配?如果是這樣的話,如果像PATH_MAX這樣的常量在將來發生變化會發生什麼?目前它設置爲4096,我使用PATH_MAX常量爲realpath()POSIX函數分配緩衝區。現在,如果將來這個常量提高到8192,那麼可能會出現問題,因爲我的程序只分配了4096個字節。還是我誤解了一些東西?
感謝您的解釋!
嘗試靜態鏈接你的代碼:'gcc -static mycode.c' ... –
另外:在你的問題中有太多的問題。如果只發佈一個明確的問題,你會得到更好的答案。 –
@ DouglasB.Staple:如果你這樣做,你必須分發資源! –