程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c/c++基礎(十七) 編譯so與動態加載so

c/c++基礎(十七) 編譯so與動態加載so

編輯:C++入門知識

c/c++基礎(十七) 編譯so與動態加載so


c文件filea.c:

#include 
void fun1()
{
	printf("i am from filea fun1 \n");
}

c文件fileb.c:

#include 
void fun2()
{
	printf("i am from fileb fun2 \n");
}

測試文件testso.c

void fun1();
void fun2();
int main(int argc,char *argv[])
{
	fun1();
	fun2();
	return 0;
}


1.將filea.c fileb.c編譯成so庫供testso.c調用,命令如下:


gcc -Wall -fpic -shared filea.c fileb.c -o first.so

\



<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PHN0cm9uZz4yLrHg0ut0ZXN0c28uY7KiwbS907myz+2/4mZpcnN0LnNvPC9zdHJvbmc+PC9wPgo8cD5nY2MgLVdhbGwgdGVzdHNvLmMgZmlyc3Quc28gLW8gdGVzdHNvPGJyPgo8L3A+CjxwPjxicj4KPC9wPgo8cD48aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20141125/20141125085609297.png" alt="\">


3.執行。

此時,執行./testso 將會拋出./testso: error while loading shared libraries: first.so.0:cannot open shared object file: No such file or directory

程序 testso已經完成,但要運行它必須讓其能定位到共享庫 first.so,因為庫中的函數要在程序運行時被加載。 需要注意的是,當前工作目錄可能不在共享庫的查找路徑中,因此需要使用如下的命令行設定環境變量LD_LIBRARY_PATH:


$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./


再次執行./testso,輸出正確結果:






  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved