sv2012C语言编程除法,C语言和SV的混合编译举例

其实很简单,就是两种不同的语言链接成可执行文件让编译工具能够识别就可以了,具体如下。

一个C语言的动态库

首先,我们要编译一个动态库。什么是动态库?动态库就是*.so文件。

下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:so_example.h,三个.c文件:example_a.c、example_b.c、example_c.c,我们将这几个文件编译成一个动态库: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");

}

将这几个文件编译成一个动态库:libexample.so。

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

动态库链接

上一章节,我们已经成功生成了一个自己的动态链接库libexample.so,下面我们通过一个程序来调用这个库里的函数。程序的源文件为:example.c(这里就是你自己的case名字)。

example.c文件如下:

#include "so_example.h"

int main() {

example_a();

example_b();

example_c();

return 0;}

将example.c与动态库libexample.so链接生成执行文件example:

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

-shared该选项指定生成动态链接库,不用该标志外部程序无法链接。此相当于一个可执行文件

-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的,所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。

-L.:表示要链接的库在当前目录中

-lexample:编译器查找动态链接库时有隐含的命名规则,即在给出的名字(example)前面加上lib,后面加上.so来确定库的名称。

0d3bd9d5f189

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值