Closed tomhenderson closed 2 years ago
You need to give a few parameters to configure to build for ns3. Here you're compiling for a Kernel module ;)
You need to give a few parameters to configure to build for ns3. Here you're compiling for a Kernel module ;)
Sorry, I simplified for the issue report. Here are the arguments being passed to configure:
./configure --disable-linuxmodule --enable-nsclick --enable-wifi
It results in the same error. This configuration works on earlier Ubuntu, but not on Ubuntu 21.04.
Has anybody found a solution for this? I'm facing the same issue
The above workaround works for me too (Arch Linux, kernel 5.17.8, GCC 12.1.0).
Workaround: The below patch works for me on this system; have not checked other systems.
diff --git a/include/click/cxxprotect.h b/include/click/cxxprotect.h index 65662aff7..f199df45a 100644 --- a/include/click/cxxprotect.h +++ b/include/click/cxxprotect.h @@ -9,7 +9,6 @@ # define public linux_public # define namespace linux_namespace # define false linux_false -# define true linux_true #endif #ifndef CLICK_CXX_PROTECT
Same error on Ubuntu 22.04
The problem seems to be with # include <netinet/in.h>
inside ./include/clicknet/ip.h
If I add #undef true
right before # include <netinet/in.h>
, the compilation error disappears. It doesn't work if I add it after the include statement.
Is there a way to do that so it works also on old system without the define true? I think the define in netinet/in.h should be found at configure time and then expose the true or not according to the result of that.
What are your compile flags so I can try?
@tomhenderson dear tomhenderson, how do you correct? I meet same error on ubuntu 22.04
Hi @tbarbette, the build is still broken for me with #502. Here's the complete build output: https://pastebin.com/TsUtmApV.
$ ./configure --prefix=/usr --sbindir=/usr/bin --enable-all-elements
$ make -j1
...
CREATE elements.mk
CXX ../lib/userutils.cc
CXX ../elements/ip6/addresstranslator.cc
CXX ../elements/ip6/icmp6error.cc
CXX ../elements/ip6/ip6routetable.cc
CXX ../elements/ip6/lookupip6route.cc
CXX ../elements/ip6/markip6header.cc
CXX ../elements/ip6/protocoltranslator64.cc
CXX ../elements/ip6/setip6address.cc
CXX ../elements/ip6/protocoltranslator46.cc
CXX ../elements/ip6/setip6dscp.cc
CXX ../elements/ip/checkipheader2.cc
In file included from ../include/clicknet/ip6.h:6,
from ../include/clicknet/icmp6.h:4,
from ../elements/ip6/icmp6error.cc:19:
../include/click/cxxprotect.h:12:25: error: ‘linux_true’ was not declared in this scope
12 | # define true linux_true
| ^~~~~~~~~~
It looks like we need to do the same thing for include/clicknet/ip6.h
, which I assume is not enabled for Ubuntu?
But wouldn't it make more sense to fix the issue by including or defining/adding macro checks in include/click/cxxprotect.h
directly, instead of modifying all the other files that include that file?
Ah yes I did not try with ip6. Yes it would be great but I could not find what to check in the incriminated file, nor exactly where is the clashing use...
While testing ns-3 with the most recent click code, I encountered a compilation error on Ubuntu 21.04 with g++ version gcc version 11.1.0 (Ubuntu 11.1.0-1ubuntu1~21.04).
Steps to reproduce:
Error reported:
Workaround: The below patch works for me on this system; have not checked other systems.