歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

利用GCC編譯器生成動態鏈接庫和靜態鏈接庫

1、編譯過程

gcc –fPIC –c xxx.c

其中-fPIC是通知gcc編譯器產生位置獨立的目標代碼。鏈接的時候不通過拷貝來進行。

2、鏈接過程

gcc –shared –o libxxx.so xxx.o

經過編譯鏈接就可以生成動態鏈接庫,其擴展名為.so

Eg.

還可以gcc –fPIC –shared -o libhello.so hello.c

舉個例子:

//Hello.h

//hello.c

//main.c

先生成動態鏈接庫

然後編譯鏈接main.c

但是把-lhello放在文件名後面就沒有問題了,並生成了一個main執行文件:

運行執行文件的時候出現了以下問題:

原因可能是程序運行時並不知道動態庫所在的路徑,因此自然未找到。

解決方法:

拷貝動態鏈接庫到系統共享目錄下,或在系統共享目錄下為該動態鏈接庫建立連接(硬連接或符號連接均可,常用符號連接)。

其中ldconfig是為了讓動態鏈接庫為系統所共享。

動態鏈接庫被系統所共享以後,再運行main,得到結果如下:

利用GCC編譯器生成靜態鏈接庫

用個例子來說明如何在gcc編譯器中生成靜態鏈接庫

//Hello.h

//hello.c

//main.c

首先gcc –c hello.c文件生成hello.o

然後利用hello.o生成靜態鏈接庫,利用

ar –rc –o libhello.a hello.o

或者利用 ar rcs –o libhello.a hello.o

然後利用靜態鏈接庫編譯鏈接main.c

Linux升級GCC 4.8.1清晰簡明教程(Ubuntu 12.04 64位版為例)  http://www.linuxidc.com/Linux/2014-04/99583.htm 

Ubuntu 14.04 LST安裝GCC 4.1.2  http://www.linuxidc.com/Linux/2016-06/132040.htm

Ubuntu下Vim+GCC+GDB安裝及使用 http://www.linuxidc.com/Linux/2013-01/78159.htm 

Ubuntu下兩個GCC版本切換 http://www.linuxidc.com/Linux/2012-10/72284.htm 

CentOS6.5升級手動安裝GCC4.8.2  http://www.linuxidc.com/Linux/2015-01/112595.htm 

GCC 的詳細介紹:請點這裡

Copyright © Linux教程網 All Rights Reserved