雷火电竞-中国电竞赛事及体育赛事平台

歡迎來(lái)到入門(mén)教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

在C語(yǔ)言中調(diào)用C++做的動(dòng)態(tài)鏈接庫(kù)

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊:

今天在做東西的時(shí)候遇到一個(gè)問(wèn)題,就是如何在C語(yǔ)言中調(diào)用C++做的動(dòng)態(tài)鏈接庫(kù)so文件

如果你有一個(gè)c++做的動(dòng)態(tài)鏈接庫(kù).so文件,而你只有一些相關(guān)類(lèi)的聲明, 那么你如何用c調(diào)用呢,別著急,本文通過(guò)一個(gè)小小的例子,讓你能夠很爽的搞定.  

鏈接庫(kù)頭文件:

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

這時(shí)候生成libmy.so文件,將其拷貝到系統(tǒng)庫(kù)里面:/usr/lib/
進(jìn)行二次封裝:

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

這時(shí)候生成第二個(gè).so文件,此時(shí)庫(kù)從一個(gè)類(lèi)變成了一個(gè)c的接口.
拷貝到/usr/lib
下面開(kāi)始調(diào)用:

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

運(yùn)行Z$./myapp

10
$

上一篇:C語(yǔ)言演示對(duì)歸并排序算法的優(yōu)化實(shí)現(xiàn)

欄    目:C語(yǔ)言

下一篇:簡(jiǎn)要說(shuō)明C語(yǔ)言中指針函數(shù)與函數(shù)指針的區(qū)別

本文標(biāo)題:在C語(yǔ)言中調(diào)用C++做的動(dòng)態(tài)鏈接庫(kù)

本文地址:http://www.jygsgssxh.com/a1/Cyuyan/2336.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有