程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 在C說話中挪用C++做的靜態鏈接庫

在C說話中挪用C++做的靜態鏈接庫

編輯:關於C++

在C說話中挪用C++做的靜態鏈接庫。本站提示廣大學習愛好者:(在C說話中挪用C++做的靜態鏈接庫)文章只能為提供參考,不一定能成為您想要的結果。以下是在C說話中挪用C++做的靜態鏈接庫正文


明天在做器械的時刻碰到一個成績,就是若何在C說話中挪用C++做的靜態鏈接庫so文件

假如你有一個c++做的靜態鏈接庫.so文件,而你只要一些相干類的聲明, 那末你若何用c挪用呢,別焦急,本文經由過程一個小小的例子,讓你可以或許很爽的弄定.  

鏈接庫頭文件:

head.h

class A 
{ 
    public: 
    A(); 
    virtual ~A(); 
    int gt(); 
    int pt(); 
private: 
    int s; 
}; 

firstso.cpp

#include <iostream>  
#include "head.h" 

A::A(){} 
A::~A(){} 
int A::gt() 
{ 
  s=10; 
} 
int A::pt() 
{ 
    std::cout<<s<<std::endl; 
} 

編譯敕令以下:

g++ -shared -o libmy.so firstso.cpp

這時候候生成libmy.so文件,將其拷貝到體系庫外面:/usr/lib/
停止二次封裝:

secso.cpp

#include <iostream> 
#include "head.h" 
extern "C" 
{ 
int f(); 
int f() 
{ 
A a; 
a.gt(); 
a.pt(); 
return 0; 
} 
} 

編譯敕令:

gcc -shared -o sec.so secso.cpp -L. -lmy

這時候候生成第二個.so文件,此時庫從一個類釀成了一個c的接口.
拷貝到/usr/lib
上面開端挪用:

test.c

#include "stdio.h" 
#include "dlfcn.h" 
#define SOFILE "sec.so" 
int (*f)(); 
int main() 
{ 
void *dp; 
dp=dlopen(SOFILE,RTLD_LAZY); 
f=dlsym(dp,"f"); 
f(); 
return 0; 
} 

編譯敕令以下:

gcc -rdynamic -s -o myapp test.c

運轉Z$./myapp

10
$

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