c++ - 如何包含“<>”级联标题
问题描述
我正在尝试使用 SWIG 来将 C++ 代码用作 Go 模块。我的文件夹是这样组织的:
MyLib/
-go-integration
-basic_host
-basic_host.i
-basic_host_wrap.cxx // gen by SWIG
-basic_host_wrap.h // gen by SWIG
-basic_host.go // gen by SWIG
-MyLib/
-include/
-mylib
-common.hpp
-inputs.hpp
-guests.hpp
-logger.hpp
- ...
-src/
-guests.cpp
-logger.cpp
- ...
我的 basic_host.i 文件:
%module(directors="1") basic_host
%{
#include <atomic>
#include <map>
#include <iostream>
#include "../../MyLib/include/mylib/inputs.hpp"
#include "../../MyLib/include/mylib/common.hpp"
#include "../../MyLib/include/mylib/guests.hpp"
%}
%inline %{
somefunc to export ....
%}
%constant someConstant...
现在我一直在使用的是:
swig -go -cgo -c++ -intgosize 64 .\basic_host.i
go install
In file included from basic_host_wrap.cxx:344:
../../MyLib/include/mylib/common.hpp:6:10: fatal error: mylib/inputs.hpp: No such file or directory
6 | #include <mylib/inputs.hpp>
|
^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
我的问题是我似乎无法导入我的 C++ 文件,因为它们正在使用“<>”导入文件。但是在 C++ 方面,我使用这些文件没有问题(导入做得很好)。
我的 go 包需要导入,guests.hpp
但它会导入common.hpp
该导入inputs.hpp
并给我该错误。也许有一种方法可以通过 ext 依赖我的 lib 导入直接,而不是给出相对路径,但我还没有找到它。
这种行为可能可以通过 SWIG 使用 gcc/g++ 并且不知道在哪里找到包含文件但我不知道如何更改/尝试这一事实来解释。
解决方案
这就是我所怀疑的,SWIG 使用 gcc 和 cgo 来生成文件,您可以添加作为CGO_CPPFLAGS
包含文件路径的环境变量。
$env:CGO_CPPFLAGS="-I D:/Repos/MyLib/MyLib/include"
我也尝试使用 SWIG 的命令 -I 如下:
swig -go -cgo -c++ -I"D:/Repos/MyLib/MyLib/include" -intgosize 64 .\basic_host.i
但它没有直接工作。
推荐阅读
- javascript - Discord JS - DiscordAPIError:未知消息
- javascript - 如何使用角度在scss的资产文件夹中加载背景图像
- c# - 如何解决异常:“呼叫被被调用者拒绝。来自 HRESULT 的异常:0x80010001 (RPC_E_CALL_REJECTED))”?
- export-to-excel - 导出到 Excel 时如何隐藏 topCalc 行
- python - 如何在 tkinter 文本框中添加缩进?
- protege - 如何在 Protégé 中为跨多个类的传递关系建模?
- php - 我回显了一个表单和 ajax 代码以使用 php 保存该特定表单,但无论我选择什么,它都只保存第一行数据
- dart - 未来延迟执行
- azure - 如何在 Azure 存储中禁用快照?
- r - 基于四分位数的计算(任何百分位数)