阅读 zig 文档时,我认为 zig 可以编译 C 和 C++ 代码。因此,我认为你可以通过
我首先创建项目
由于现在正在解析此 C++ 库并且使用 C++ 标准库,所以当我
最后,卡在的错误是出现在
@cImport
导入 C++ 文件的头文件,并使zig build
成功。但是,我似乎无法将其用于 C++ 库集成。我首先创建项目
zig init-lib
,然后通过@cImport
指令将我的导入添加到src/main.zig
中。具体来说,我@cInclude("hooks/hooks.h")
了该库的 C++ 头文件。如果此时尝试进行zig build
,则构建将失败,因为找不到头文件。我通过修改build.zig
并使用lib.addIncludeDir("/usr/include/library")
来解决这个问题。由于现在正在解析此 C++ 库并且使用 C++ 标准库,所以当我
zig build
时,下一个错误是找不到stdexcept
头文件。为了解决这个问题,我修改build.zig
并使用lib.linkSystemLibrary("c++")
。最后,卡在的错误是出现在
/path/to/zig-linux-x86_64-0.9.1/lib/libcxx/include/<files>
中的一系列错误。我得到类似于unknown type name '__LIBCPP_PUSH_MACROS
、unknown type name 'namespace'
或unknown type name 'template'
的内容。通过谷歌搜索,我只能找到部分相关的内容,即这是由于clang默认将.h文件解释为C文件而不是C++文件导致的,显然不具有namespace
或template
关键字,但我不知道如何处理这些信息。LLVM on MacOs - unknown type name 'template' in standard file iosfwd
有人了解如何通过 zig 真正与 C++(而不是纯C)库集成吗?
hooks.h
看来,它似乎是设计用于被C++代码包含的,因为它有命名空间并使用C++特性:https://github.com/isc-projects/kea/blob/master/src/lib/hooks/hooks.h - pfgaddCSourceCode()
编译的,这可以处理C++代码。而C头文件则是通过@cImport
解析的,它无法处理C++代码。 - pfg