linux下的動態連結程式庫編程

來源:互聯網
上載者:User
 動態連結程式庫是一種通用的軟體組件技術,是多種作業系統中提供基本服務的方式。比如Win32核心就是幾個DLL檔案構成。這種技術在Linux作業系統下 也有對應的實現,就是Linux標準對象Standard Ojbect,對應的副檔名為.so。下面通過一個簡單的例子開始介紹Linux標準對象。我們的標準對象檔案含有一個函數,不需要聲明export 匯出符號,只需要編譯器設定即可。如下:

#include <stdio.h>

void show()
{
printf("Standard Object by gashero/n");
}

儲存為myso.c檔案,按照如下編譯:

$ gcc -fPIC -shared -o libmyso.so myso.c

  執行產生一個libmyso.so檔案,按照Linux標準對象的命名慣例,應該在庫名稱之前加上"lib"首碼,儘管不是必須的。編譯開關-fPIC代表函數符號可以重新導向,-shared代表編譯結果是一個標準對象。
  不同於Win32DLL,Linux標準對象中的所有函數都是直接匯出的,都可以被調用程式所訪問。下面我們編寫調用程式:

#include <stdio.h>

int main()
{
printf("Invoke my so/n");
show();
return 0;
}

儲存為invoke.c,按照如下gcc開關編譯:

$ gcc -o test invoke.c ./libmyso.so

   編譯產生test可執行檔。如上編譯條件的最後一條需要是所調用的標準對象檔案名稱,注意必須含有路徑。如果只是使用libmyso.so,則必須確保 這個檔案在可訪問的PATH下面。本例所使用的檔案名稱"./libmyso.so"是當前路徑下的,使用了相對路徑。

測試輸出結果如下:

$ ./test

Invoke my so

Standard Object by gashero

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.