使用 xsc 编译器在 Vivado 中添加 C 链接器时出错

问题描述 投票:0回答:1

我目前正在探索 Vivado 和 SystemVerilog,并且正在开发一个简单的原型,以更好地理解 Windows 中的 SystemVerilog DPI 和端点概念。

在我的原型中,我遵循了 Vivado DPI 导入示例作为参考 [https://docs.amd.com/r/2021.2-English/ug900-vivado-logic-simulation/Compiling-C-Code]。该原型涉及在外部启动一个 Python TCP 服务器。然后,当执行 Vivado 模拟器时,SystemVerilog 预计会从 C 程序调用 cFunc 函数。这个cFunc

函数包含创建 TCP 客户端并向服务器发送字符串“Hello, server”的逻辑。

但是在仿真的时候,我遇到了C程序的错误,内容如下:

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0x22): 对 `__imp_WSAStartup' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0x55): 对 `__imp_socket' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0x7b): 对 `__imp_WSACleanup' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0xb6): 对 `__imp_htons' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0xde): 对 `inet_pton' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0xff): 对 `__imp_closesocket' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0x108): 对 `__imp_WSACleanup' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0x132): 对 `__imp_connect' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0x156): 对 `__imp_closesocket' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0x15f): 对 `__imp_WSACleanup' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0x1ab): 对 `__imp_send' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0x1cf): 对 `__imp_closesocket' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0x1d8): 对 `__imp_WSACleanup' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0x205): 对 `__imp_recv' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0x233): 对 `__imp_closesocket' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0x23c): 对 `__imp_WSACleanup' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0x276): 对 `__imp_closesocket' 的未定义引用

./xsim.dir\work\xsc\dpi.a(function.win64.obj):function.c:(.text+0x27f): 对 `__imp_WSACleanup' 的未定义引用

为了提供上下文,我在我的 C 程序中包含了必要的 Winsock2.h 标头,并且在 run.bat 脚本中添加了 C 链接器选项,如下所示

在\xsc函数中调用%install_root%.c --gcc_link_options -Lws2_32 "C:\Windows\System32"

我非常感谢您为解决此问题提供的任何指导或帮助。

system-verilog vivado system-verilog-dpi
1个回答
0
投票

我在错误消息中看到 64,但在链接器命令中看到 32。问题可能是您在链接 64 位库时尝试传递 32 位库。我特意指的是

-Lws2_32

© www.soinside.com 2019 - 2024. All rights reserved.