On Fri, Feb 2, 2024 at 2:41 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.laranjeiro@6wind.com > > > Cc: stable@dpdk.org > > > > > > Signed-off-by: Ashish Sadanandan > > > > 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. > > 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 > 100% agree with Bruce. It's a valid ideological argument that private headers don't need such safeguards, but it's difficult to enforce and easy to break during refactoring. - Ashish