【发布时间】:2021-10-25 02:22:42
【问题描述】:
我有几个 .c 和 .cpp 文件,我想将它们作为单个 .so 共享对象文件连接到 System Verilog 测试平台。我采用的方法是使用单独的 .o 文件编译成单个 .so 文件,然后在 vcs 编译期间将其与其余 SV 文件一起添加。
gcc -w -pipe -fPIC -O -c file1.c -o file1.o
gcc -w -pipe -fPIC -O -c -x c++ file2.cpp -o file2.o
gcc -shared -o libr.so file1.o file2.o
使用这种方法,C 编译没有错误,但是当我尝试将 verilog 测试平台与 libr.so 文件一起编译时,我得到“未定义的引用”编译错误。因此,似乎 c 和 c++ 文件之间的链接已断开,并且 vcs 编译失败。 c++ 文件是用 c 风格编写的,所以当我将 file2.cpp 的扩展名更改为 file2.c 时,一切都按预期编译和工作。
SV和DPI之间的接口是通过.c文件。也就是说,SV 从 .c 文件调用一个函数,然后从 .cpp 文件调用另一个函数。错误是对 .cpp 文件中的函数的“未定义引用”。
我找到了几个示例,展示了如何将 c OR c++ 文件编译到系统 verilog 测试平台中,但找不到结合 c 和 c++ 的示例。因此,问题似乎与混合 c 和 c++ 文件有关。
Synopsys VCS 编译器是否支持混音?我上面的编译命令是否正确?有什么想法可能是错误的吗?
【问题讨论】:
标签: c++ c gcc system-verilog