C語(yǔ)言和SV的混合編譯舉例

其實(shí)很簡(jiǎn)單,就是兩種不同的語(yǔ)言鏈接成可執(zhí)行文件讓編譯工具能夠識(shí)別就可以了,具體如下。

一個(gè)C語(yǔ)言的動(dòng)態(tài)庫(kù)

首先,我們要編譯一個(gè)動(dòng)態(tài)庫(kù)。什么是動(dòng)態(tài)庫(kù)?動(dòng)態(tài)庫(kù)就是*.so文件。

下面通過(guò)一個(gè)例子來(lái)介紹如何生成一個(gè)動(dòng)態(tài)庫(kù)。這里有一個(gè)頭文件:so_example.h,三個(gè).c文件:example_a.c、example_b.c、example_c.c,我們將這幾個(gè)文件編譯成一個(gè)動(dòng)態(tài)庫(kù):libexample.so。

//so_example.h文件如下:

#include "stdio.h"

void example_a();

void example_b();

void example_c();

//example_a.c文件如

#include "so_example.h"

void example_a() {?

printf("this is in example_a...\n");

}

//example_b.c文件如下

include "so_example.h"

void example_b() {?

printf("this is in example_b...\n");

}

//example_c.c文件如下:

#include "so_example.h"

void example_c() {?

printf("this is in example_c...\n");

}

將這幾個(gè)文件編譯成一個(gè)動(dòng)態(tài)庫(kù):libexample.so。

gcc example_a.c example_b.c example_c.c -fPIC -shared -o libexample.so

動(dòng)態(tài)庫(kù)鏈接

上一章節(jié),我們已經(jīng)成功生成了一個(gè)自己的動(dòng)態(tài)鏈接庫(kù)libexample.so,下面我們通過(guò)一個(gè)程序來(lái)調(diào)用這個(gè)庫(kù)里的函數(shù)。程序的源文件為:example.c(這里就是你自己的case名字)。

example.c文件如下:

#include "so_example.h"

int main() {

example_a();

example_b();

example_c();

return 0;}

將example.c與動(dòng)態(tài)庫(kù)libexample.so鏈接生成執(zhí)行文件example:

gcc example.c -L. -lexample -o example

-shared該選項(xiàng)指定生成動(dòng)態(tài)鏈接庫(kù),不用該標(biāo)志外部程序無(wú)法鏈接。此相當(dāng)于一個(gè)可執(zhí)行文件

-fPIC:表示編譯為位置獨(dú)立的代碼,不用此選項(xiàng)的話編譯后的代碼是位置相關(guān)的,所以動(dòng)態(tài)載入時(shí)是通過(guò)代碼拷貝的方式來(lái)滿足不同進(jìn)程的需要,而不能達(dá)到真正代碼段共享的目的。

-L.:表示要鏈接的庫(kù)在當(dāng)前目錄中

-lexample:編譯器查找動(dòng)態(tài)鏈接庫(kù)時(shí)有隱含的命名規(guī)則,即在給出的名字(example)前面加上lib,后面加上.so來(lái)確定庫(kù)的名稱。


如下加載在你的makefile文件中就可以了

vcs -debug_all -full64 -sverilog –R –f sv_filelist libexample.so

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容