-Wl 表示後面的參數也就是-soname,libhello.so.1直接傳給連接器ld進行處理。實際上,每一個庫都有一個soname,當連接器發現它正 在查找的程序庫中有這樣一個名稱,連接器便會將soname嵌入連結中的二進制文件內,而不是它正在運行的實際文件名,在程序執行期間,程序會查找擁有 soname名字的文件,而不是庫的文件名,換句話說,soname是庫的區分標志。
這樣做的目的主要是允許系統中多個版本的庫文件共存,習慣上在命名庫文件的時候通常與soname相同
libxxxx.so.major.minor
其中,xxxx是庫的名字,major是主版本號,minor 是次版本號
簡單的來說,soname指定了庫的名字,而不去管生成的是什麼名字的庫,在做連接是將這個soname指定的名字加入執行文件中,而程序運行是也是去加載soname指定的庫文件名。所以如果程序連接了新升級的庫,只需要將這個新庫拷貝到目錄下面後,對其以soname做一個符號鏈接就能調用。
如果庫升級了,但是程序依舊使用舊的鏈接庫,那麼只需對這個將舊庫名字軟鏈接到新升級的庫中去即可。