C++ Visual Studio 2013无法从网络共享生成

C++ Visual Studio 2013无法从网络共享生成,c++,visual-studio,C++,Visual Studio,我有一个在Mac电脑上的项目,我正试图通过网络共享在PC机上构建它 然而,Visual Studio报告: 1> 链接:致命错误LNK1201:写入程序数据库时出错 'X:\XYZ\Builds\VisualStudio2013\Debug\XYZ.pdb';检查是否不足 磁盘空间、路径无效或权限不足 然而: 这是VisualStudio在一秒钟前创建的,因此它必须具有写入权限,并且有足够的磁盘空间。我对权限进行了检查,看不出有什么问题 有没有关于如何使这项工作的建议?那会很方便的 编辑:我已将

我有一个在Mac电脑上的项目,我正试图通过网络共享在PC机上构建它

然而,Visual Studio报告:

1> 链接:致命错误LNK1201:写入程序数据库时出错 'X:\XYZ\Builds\VisualStudio2013\Debug\XYZ.pdb';检查是否不足 磁盘空间、路径无效或权限不足

然而:

这是VisualStudio在一秒钟前创建的,因此它必须具有写入权限,并且有足够的磁盘空间。我对权限进行了检查,看不出有什么问题

有没有关于如何使这项工作的建议?那会很方便的


编辑:我已将mac上的SMB升级到最新版本,这也没有帮助

tl;dr尝试向smb.conf添加一个
否决oplock文件
设置,该设置根据说明指定VS解决方案的.pdb文件


一种可能性是,所谓的权限缺失是由于VisualStudio本身多次尝试打开该文件造成的。在构建网络共享时,我在VisualStudio中看到过类似这样的奇怪问题,即使网络共享在Windows服务器上运行时也是如此。但是,在Windows Server上,在这种情况下会有一个超时(默认值为35秒),在此之后,它将允许打开第二个文件句柄,然后继续其业务。最后,我不得不观察Wireshark对SMB流量的跟踪,以了解那里发生了什么

IIRC,交换的结果是:

  • VS打开.pdb的句柄。默认情况下,它接收独占访问,因为它是当时打开文件的唯一句柄

  • VS尝试打开.pdb的第二个句柄,但它当前已为独占访问打开

  • SMB服务器发送一条消息,询问持有第一个句柄(碰巧也是VS)的客户端是否可以将句柄切换到共享访问模式

  • VS无法响应服务器的请求,因为它在等待服务器响应其打开第二个句柄的请求时被阻止

  • SMB服务器上的超时过期,之后它将强制将句柄切换到共享模式。默认情况下,此超时在Windows SMB/CIFS服务器上启用

  • SMB服务器现在允许打开第二个文件句柄,VS将继续运行

  • 这种行为称为“机会主义锁定”,Microsoft有一份关于如何在Windows文件服务器上配置它的文档
    OplockBreakWait
    是服务器等待客户端响应oplock中断请求的时间量(秒)

    但是,听起来您的samba实现上可能没有发生oplock中断请求超时。samba的文档中有一个关于如何在samba中配置oplock的文档。它提到了一个可以在
    smb.conf
    中指定的选项,名为
    否决oplock files
    ,该选项允许您指定将禁用oplock的特定文件您可以尝试将.pdb添加到
    smb.conf
    中的
    否决oplock文件
    设置中,以查看这是否解决了您的问题。


    顺便说一句,上面链接的samba文档提到它的默认oplock break wait time为0,我假设它禁用了超时,从而导致您看到的行为。不幸的是,该文档中与
    oplock break wait time
    选项的实际文档的链接已断开,因此我无法确定它是否会这样做。根据链接的samba文档,
    “samba建议:“除非您已经阅读并理解samba oplock代码,否则不要更改此参数。”
    因此,您最好尝试修改
    否决oplock文件
    而不是
    oplock break wait time
    ,除非阅读samba的源代码是您的乐趣所在。:)

    我知道这个问题的答案已经完成了,但被接受的答案对我来说不起作用。 以下是我的问题的解决方案: 当项目规模增大且“.pdb”文件的大小超过300MB时,就会产生错误。 我更改了项目中的调试信息属性并成功编译了它。 您只需在下面的路径中将项目中的“调试信息格式”更改为“C7兼容(/Z7)”

    配置属性>>C/C++>>常规>>调试信息 格式


    您是否具有正确的安全权限?是。VisualStudio自己创建了它抱怨无法写入的文件。我可以从那个文件夹读写(这个文件夹是用Mac上的Samba共享的)。遗憾的是,这是一个很棒的响应,它还没有修复它。日志中有很多这样的内容,但我认为它们与问题无关:11/05/2015 16:56:49.603 smbd[36720]:文件系统不支持0X40000,文件属性11/05/2015 16:56:49.603 smbd[36720]:文件系统不支持0X0时间属性11/05/2015 16:56:49.603 smbd[36720]:文件系统不支持0X0,大小attrsAh-挂起-smb问题。我会再打给你:)好的——这是一个很好的答案——我会给你奖金。现在在mac上的smb中有一个(可能无法解决的)错误,导致其核心转储,所以我仍然需要测试它@JCx很抱歉听到您仍然有问题。我已经好几年没有在OSX上使用samba了,但当我不得不使用它时,它真的是一团糟。有一段时间,我们不得不每天或两天重新启动服务器,因为如果我们不这样做,服务器在平均正常运行2-3天后会出现内核崩溃。我完全放弃了,转而使用Visual Studio的Parallels。但这是一个很好的回答;-)这是一个完全不同的问题。它可能会导致相同的错误消息,但这并不意味着您的答案与此相关。你能和我分享真是太好了
    >dir XYZ.pdb
     Directory of X:\XYZ\Builds\VisualStudio2013\Debug
    20/04/2015  17:32         9,456,640 XYZ.pdb
                   0 Dir(s)  15,825,752,064 bytes free