1

我刚刚开始使用 Zig。我在 Windows 10 上使用 Zig 0.9.0。吸引我的功能之一是将 Zig 用作 C 或 C++ 编译器或交叉编译器。我已经成功地将 Zig 用于一些玩具程序,但是当我尝试使用 C++17 的标准库文件系统工具时,我的运气就耗尽了。这是一个最小的例子;

#include <stdio.h>
#include <filesystem>

int main( int argc, char *argv[] )
{
    std::string s("src/zigtest.cpp");
    std::filesystem::path p(s); 
    bool exists = std::filesystem::exists(p);
    printf( "File %s %s\n", s.c_str(), exists ? "exists" : "doesn't exist" );
    return 0;
}

如果我尝试使用以下命令构建它;

zig c++ -std=c++17 src\zigtest.cpp

我收到以下链接错误;

lld-link: error: undefined symbol: std::__1::__fs::filesystem::__status(std::__1::__fs::filesystem::path const&, std::__1::error_code*)
>>> referenced by ...

顺便说一句,很长一段时间我都没有走到这一步,结果发现我需要应用 -std=c++17 标志,直到那时我遇到了这个编译错误而不是链接错误;

src\zigtest.cpp:7:10: error: no member named 'filesystem' in namespace 'std'

最后我会注意到(经过一些谷歌搜索)我尝试传递一个 -lstdc++fs 标志,但也没有运气。在那种情况下,我得到了;

error(link): DLL import library for -lstdc++fs not found
error: DllImportLibraryNotFound
4

2 回答 2

3

几点评论:您所看到的事实std::__1::__fs::filesystem意味着您正在使用 libc++。

试图链接到libstdc++fs哪个是 gcc 的东西,即使你的系统上有它也行不通。

你使用的是什么版本的 libc++?libc++ 的文档在这里:

他们谈论使用<filesystem>以及您必须链接到什么(如果有的话)。

于 2022-01-09T06:51:28.833 回答
1

应该在这个 PR 中解决。在我将这个问题联系起来后,Jakub 和 Spex 立即着手处理它 :^)

https://github.com/ziglang/zig/pull/10563

于 2022-01-10T18:03:55.080 回答