On 2/2/2024 9:40 AM, Bruce Richardson wrote: > On Fri, Feb 02, 2024 at 10:18:23AM +0100, Thomas Monjalon wrote: >> 02/02/2024 06:13, Ashish Sadanandan: >>> The header was missing the extern "C" directive which causes name >>> mangling of functions by C++ compilers, leading to linker errors >>> complaining of undefined references to these functions. >>> >>> Fixes: 86c743cf9140 ("eal: define generic vector types") >>> Cc: nelio.laranje...@6wind.com >>> Cc: sta...@dpdk.org >>> >>> Signed-off-by: Ashish Sadanandan <ashish.sadanan...@gmail.com> >> >> Thank you for improving C++ compatibility. >> >> I'm not sure what is best to fix it. >> You are adding extern "C" in a file which is not directly included >> by the user app. The same was done for rte_rwlock.h. >> The other way is to make sure this include is in an extern "C" block >> in lib/eal/*/include/rte_vect.h (instead of being before the block). >> >> I would like we use the same approach for all files. >> Opinions? >> > I think just having the extern "C" guard in all files is the safest choice, > because it's immediately obvious in each and every file that it is correct. > Taking the other option, to check any indirect include file you need to go > finding what other files include it and check there that a) they have > include guards and b) the include for the indirect header is contained > within it. >
I assume you mean all header files exposed to user (ones installed by meson), in that case +1 > Adopting the policy of putting the guard in each and every header is also a > lot easier to do basic automated sanity checks on. If the file ends in .h, > we just use grep to quickly verify it's not missing the guards. [Naturally, > we can do more complete checks than that if we want, but 99% percent of > misses can be picked up by a grep for the 'extern "C"' bit] > > /Bruce