我刚刚开始使用 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