如何包含“<>”级联 headers
How to include "<>" cascading headers
我正在尝试使用 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++ 方面,我使用这些文件没有问题(导入完成得很好)。
guests.hpp
需要我的 go 包导入,但它导入 common.hpp
导入 inputs.hpp
并给我这个错误。也许有一种方法可以通过我的 lib 的 ext 依赖项直接导入而不给出相对路径,但我还没有找到它。
这种行为可能是因为 SWIG 使用 gcc/g++ 并且不知道在哪里可以找到包含文件,但我也不知道如何 change/try。
这正是我所怀疑的,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
但它并没有直接起作用。
我正在尝试使用 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++ 方面,我使用这些文件没有问题(导入完成得很好)。
guests.hpp
需要我的 go 包导入,但它导入 common.hpp
导入 inputs.hpp
并给我这个错误。也许有一种方法可以通过我的 lib 的 ext 依赖项直接导入而不给出相对路径,但我还没有找到它。
这种行为可能是因为 SWIG 使用 gcc/g++ 并且不知道在哪里可以找到包含文件,但我也不知道如何 change/try。
这正是我所怀疑的,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
但它并没有直接起作用。