You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows11下Vcpkg+VS2022部署SOEM无法检测网卡适配器

解决Windows11+VS2022+Vcpkg环境下SOEM无法检测以太网适配器的问题

核心问题定位

你遇到的pcap_create_common中p->opt.source为空、pcap_activate触发异常的问题,本质是Windows下网卡名称指定错误、pcap库兼容性不足,或是权限/配置缺失导致SOEM无法正常初始化网卡会话。

针对性解决方案

1. 替换为Npcap并开启兼容模式

WinPcap已停止维护,Windows11下优先使用Npcap:

  • 下载Npcap官方安装包,安装时必须勾选Install Npcap in WinPcap API-compatible Mode,保证SOEM能调用兼容接口。
  • 安装完成后重启电脑,确保驱动生效。

2. 获取Windows下精确的网卡标识

Windows不支持eth0/Ethernet这类通用名称,必须使用网卡的精确名称或GUID:

  • 用SOEM自带工具:找到Vcpkg安装目录下的bin文件夹(如vcpkg/installed/x64-windows/bin),运行ethercattool.exe list,会列出所有可被SOEM识别的网卡名称、描述及GUID。
  • 或用系统命令:在管理员CMD中执行getmac /v,查看网卡的“名称”列;也可以通过设备管理器→网络适配器→右键目标网卡→属性→高级→查看“网络地址”旁的设备名称。

3. 修正编译与链接配置

  • 确认VS项目预处理器中已定义_WIN32宏(添加/WIN32编译选项后通常会自动添加,可在项目属性→C/C++→预处理器中手动检查)。
  • 确保Vcpkg安装SOEM时启用了PCAP支持:执行vcpkg install soem[pcap]:x64-windows(根据你的平台替换x64-windows为x86-windows)。
  • 链接器添加依赖:在项目属性→链接器→输入→附加依赖项中,添加wpcap.lib和Packet.lib(Npcap的库路径默认在C:\Program Files\Npcap\Lib\x64或x86,需确保VS能找到)。

4. 以管理员权限运行程序

pcap需要底层网络访问权限,普通用户无法创建会话:

  • 右键VS图标→选择“以管理员身份运行”,再编译运行示例;或直接右键生成的exe文件→“以管理员身份运行”。
  • 暂时关闭Windows防火墙和第三方安全软件,排查是否存在数据包拦截。

5. 代码层面验证网卡列表

在调用ec_init前,先获取并打印所有可用适配器,确认目标网卡是否被识别:

#include <stdio.h>
#include "soem/ethercat.h"

int main() {
    ec_adaptert *adapter_list;
    int adapter_num = ec_find_adapters(&adapter_list);
    
    if (adapter_num == 0) {
        printf("No adapters found!\n");
        return -1;
    }
    
    printf("Found %d adapters:\n", adapter_num);
    for (int i = 0; i < adapter_num; i++) {
        printf("Adapter %d:\n", i);
        printf("  Name: %s\n", adapter_list[i].name);
        printf("  Description: %s\n", adapter_list[i].desc);
        printf("  GUID: %s\n", adapter_list[i].guid);
    }
    
    // 使用列表中的精确名称初始化
    int ret = ec_init(adapter_list[0].name);
    if (ret == 0) {
        printf("SOEM initialized successfully!\n");
        // 后续操作
        ec_close();
    } else {
        printf("ec_init failed, error code: %d\n", ret);
    }
    
    return 0;
}

6. 重置Vcpkg环境

如果上述步骤无效,重置SOEM的Vcpkg安装:

  • 执行vcpkg remove soem --purge彻底卸载。
  • 重新执行vcpkg install soem[pcap]:x64-windows,确保所有依赖(包括pcap)被正确安装。

内容的提问来源于stack exchange,提问作者k631ismart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 01:20:22