我正在做一个关于卫星通信的项目,需要在omnet中进行仿真。
我使用的是Omnet 6.0.1和INET 4.4,gcc版本是11.3.0,原生支持c++ 17(我已经将编译器设置为c++ 17模式),整个项目在虚拟机上运行。
我尝试编译一个从git repo(https://github.com/Avian688/leosatellites)找到的项目,但是失败了,错误是:命名空间“std”中没有名为“__fs”的成员。
networklayer/configurator/ipv4/LeoIpv4NetworkConfigurator.cc
networklayer/configurator/ipv4/LeoIpv4NetworkConfigurator.cc:58:13: error: no member named '__fs' in namespace 'std'
if(std::__fs::filesystem::is_directory(filePrefix) || std::__fs::filesystem::exists(filePrefix)) {
~~~~~^
networklayer/configurator/ipv4/LeoIpv4NetworkConfigurator.cc:58:64: error: no member named '__fs' in namespace 'std'
if(std::__fs::filesystem::is_directory(filePrefix) || std::__fs::filesystem::exists(filePrefix)) {
~~~~~^
networklayer/configurator/ipv4/LeoIpv4NetworkConfigurator.cc:180:15: error: no member named '__fs' in namespace 'std'
if (!std::__fs::filesystem::is_directory(filePrefix) || !std::__fs::filesystem::exists(filePrefix)) {
~~~~~^
networklayer/configurator/ipv4/LeoIpv4NetworkConfigurator.cc:180:67: error: no member named '__fs' in namespace 'std'
if (!std::__fs::filesystem::is_directory(filePrefix) || !std::__fs::filesystem::exists(filePrefix)) {
~~~~~^
networklayer/configurator/ipv4/LeoIpv4NetworkConfigurator.cc:181:14: error: no member named '__fs' in namespace 'std'
std::__fs::filesystem::create_directory(filePrefix);
~~~~~^
5 errors generated.
make: *** [Makefile:150: ../out/clang-release/src/networklayer/configurator/ipv4/LeoIpv4NetworkConfigurator.o] Error 1
我使用以下命令生成了makefile:
opp_makemake --make-so -f --deep -KINET4_4_PROJ=$HOME/omnetpp-6.0.1/samples/inet4.4 -KOS3_PROJ=$HOME/omnetpp-6.0.1/samples/os3 -DINET_IMPORT '-I/home/zzz/omnetpp-6.0.1/samples/leosatellites/src/igraph' '-I$(OS3_PROJ)/src' '-I$(INET4_4_PROJ)/src' '-I/usr/include/x86_64-linux-gnu/curl' '-L/usr/lib' '-L$(INET4_4_PROJ)/src' '-L$(OS3_PROJ)/src' '-ligraph' '-lxml2 -lz' '-lgmp' '-lblas' '-lglpk' '-llapack' '-larpack' '-lINET$(D)' '-los3$(D)'
并制成:
make MODE=release && make MODE=debug
理论上,这个错误不应该发生,因为我已经成功地编译了相关项目os3(https://github.com/Avian688/os3),并且安装了所有其他需要的包
我尝试删除c文件中所有带有“__fs”的引用,因为在c17中,std::filesystem工作正常,但随后出现新错误:错误:命名空间“std”中没有名为“filesystem”的成员。
我还尝试包含〈experimental/filesystem〉.h文件,我在其他问答中发现,也不起作用。
我以前经常使用命名空间std::filesystem,但是从来没有遇到过这样的问题,有人能解决这个问题吗?
1条答案
按热度按时间lyr7nygr1#
@Botje解决了这个问题,我只需要在configure.user文件中把默认编译器改成gcc而不是clang,然后重新编译整个omnet++,然后删除所有带有“__fs”的示例,因为我设置了
CXXFLAGS += -std=c++17
,它支持成员std::filesystem,然后重新制作leosatellite项目,它工作了!