歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> 利用GCC編譯器生成動態鏈接庫和靜態鏈接庫,gcc編譯器

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

日期:2017/3/6 9:20:05   编辑:學習Linux

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


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


轉載請標明:http://www.cnblogs.com/winifred-tang94/

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

http://xxxxxx/Linuxjc/1155427.html TechArticle

Copyright © Linux教程網 All Rights Reserved