其實(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