系统是ubuntu18.04,使用vscode IDE,C++语言,我从该网站https://www.fuzzylite.com/cpp/下载了fuzzylite6.0工具包,希望能在系统中先跑一跑示例程序,生成并组装模糊逻辑engine。于是在/home/whr/fuzzylite-6.0目录运行code .打开了vscode,配置一系列文件后仍然被#include错误拦在门外,使用绝对地址include也会出错,但文件就在那儿,怎么会引用不了呢?请大家帮我看看可能是什么情况。
以下下三图是.vscode文件下的配置文件主要内容
下图是我希望运行的包含main函数的.cpp脚本,显然#include部分报错了,说找不到这个用绝对地址的头文件,这个头文件的地址是/home/whr/fuzzylite-6.0/fuzzylite/fl/Headers.h,文件的权限我都设置了777,而且相对地址#include "fl/Headers.h"和绝对地址都会报错
可见include路径包含了我想引用的Headers.h头文件。这个头文件中包含了所有其他的头文件,只要引用这一个就可以了,这是作者为了方便考虑。
下图是引用不了的头文件Headers.h的内容
后来我尝试不引用Headers.h,而是直接把其中的所有include放到脚本中,却仍然出现了以下情况
可以使用这个路径下的脚本进行编译,这个脚本同时还执行了相关的lib安装,可能是你无法使用的问题。
关于自己的example.cpp编译,提供的链接里面有c++的编译命令说明。
// bash路径 /path/fuzzylite-6.0/fuzzylite/build.sh
bash build.sh all
bash build.sh release
关于include问题,没有使用vscode这种方式
因为#include的头文件是 fl/Headers.h
所以你的路径包含应该是/home/lwc/tmp/fuzzylite-6.0/fuzzylite/
而不是 /home/lwc/tmp/fuzzylite-6.0/fuzzylite/fl/
包含失败,可能是没install,跑一下自带的脚本;
附带,说一句,我没设置相关setting.json也是可以正常跳转文件的。
还有编译的时候如果报std_vector.h的错误的话(这个不知道是不是我什么时候改了),修改如下:
// error: expected unqualified-id before ‘.’ token
// .mn .mie_type;
// /usr/include/c++/7/bits/stl_vector.h
// 删掉 .mn .mie_type; 改为
typedef size_t size_type;
很感谢你,我看了下vscode配置文件中写的include路径确实有问题,build.sh也是将第三方库安装到系统库的必经之路,我成功解决了这个问题。
还想请问一下,有没有可能不用源码,直接基于.so或者.a文件实现在自己的脚本里使用对应库的接口呢?
@11111225:
脚本是?
.so 或者 .a 是c/c++编译出来的库,当你期望在你的c/c++源文件 *.c / */cpp 中使用库中的函数时,直接#include相关的头文件就可以(骚操作一点的话,你不需要引入头文件,直接在你的文件中声明这个函数即可(能否正常链接取决于编译生成的符号是否一致)),然后在编译链接时指定你需要链接的库的路径和地址,如果你纯命令行就搜gcc/g++ 链接库的流程,使用cmake就搜cmake链接库流程。
期望了解为什么的话,可以了解一下符号表,以及可执行文件生成的链接过程。本质上是通过符号表去链接的。
如果你只是单纯使用函数接口(no class),那引入对应的头文件和链接相应的库即可,如果需要使用到相关的class,根据你的使用情况决定是否需要将该class的 *.cpp加入编译过程,一般不需要。
@一位C++初学者: 谢谢你的耐心回答,我感觉这超过我的水平不少,我会重读研究的,非常感谢你