2011-11-04 50 views
1

我做了這些步驟,並使共享庫。 但在這裏我有一些問題向我解釋這兩個步驟,它用於共享庫

  1. 我想知道爲什麼我們寫4個5個步驟。

    我只知道,這些步驟是用於鏈接庫

  2. 在第6步,爲什麼我們只使用lhuffman insted的libhuffman的

步驟:

1 gcc -c -fPIC filebits.c -o filebits.o 
2 gcc -shared -Wl,-soname,libhuff.so.1 -o libhuffman.so.1.0.1 filebits.o 
3 mv libhuffman.so.1.0.1 /home/mydesktop/slib/ 
4 ln -sf /home/mydesktop/slib/libhuffman.so.1.0.1 /home/mydesktop/slib/libhuffman.so 
5 ln -sf /home/mydesktop/slib/libhuffman.so.1.0.1 /home/mydesktop/slib/libhuffman.so.1 
6 gcc -o app app.c -lhuffman 
7 ./app 

請給我解釋一下這些步驟

回答

1
1. i want know why we write 4 and 5 steps. 

在步驟4所創建的軟鏈接到由鏈接鏈接擡頭庫名。
在步驟5中,您正在創建一個到庫的軟鏈接,指示其主版本版本。您不需要按照這些步驟進行操作,而是可以在第一步中生成libhuffman.so作爲鏈接器查找的輸出。但是遵循這個約定,以便輕鬆跟蹤圖書館的主要版本&。通常,庫的名稱爲library_name.MAJOR_VERSION.MINOR_VERSION。有軟鏈接到library_name.MAJOR_VERSION &的形式,只是library_name的另一個軟鏈接。 library_name的形式是lib [library_name]。 so,因爲這是使用-l選項時鏈接器預期的格式。您可以在Linux PC上檢查庫,在很多情況下您會看到遵循此慣例。這link提供了一些細節。

2.in 6th step why we use only lhuffman insted of libhuffman 

GCC linker adds lib & .a (or .so) to the library name which is specified with -l option.
希望這有助於!

3

當你建立你的鏈接器選項是錯誤的[R庫:

-Wl,-soname,libhuff.so.1 

應該

-Wl,-soname,libhuffman.so.1 

fine manual

-soname =
[...]可執行文件時運行動態連接器將嘗試加載由DT_SONAME字段指定的共享對象,而不是使用給定的文件名連接。

+0

對不起,我忘了這件事.. .. thanx –