The default for what happens when you have multiple definitions of a function has changed between GCC9 and GCC10 so NE10 fails to build on GCC10 with:
/usr/bin/c++ -g -O2 -ffile-prefix-map=/home/wookey/packages/ne10/ne10-1.2.1=. -fstack-protector-strong -Wformat -Werror=format-\
security -Wdate-time -D_FORTIFY_SOURCE=2 -fno-strict-aliasing -O2 -DNDEBUG -Wl,-z,relro -rdynamic CMakeFiles/NE10_imgproc_unit_\
test_static.dir/__/modules/imgproc/test/test_main.c.o CMakeFiles/NE10_imgproc_unit_test_static.dir/__/modules/imgproc/test/test\
_suite_resize.c.o CMakeFiles/NE10_imgproc_unit_test_static.dir/__/modules/imgproc/test/test_suite_rotate.c.o CMakeFiles/NE10_im\
gproc_unit_test_static.dir/__/modules/imgproc/test/test_suite_boxfilter.c.o CMakeFiles/NE10_imgproc_unit_test_static.dir/src/se\
atest.c.o CMakeFiles/NE10_imgproc_unit_test_static.dir/src/unit_test_common.c.o CMakeFiles/NE10_imgproc_unit_test_static.dir/sr\
c/NE10_random.c.o -o NE10_imgproc_unit_test_smoke ../modules/libNE10.a -lm -lrt -lstdc++
/usr/bin/ld: CMakeFiles/NE10_imgproc_unit_test_static.dir/__/modules/imgproc/test/test_suite_resize.c.o:./obj-aarch64-linux-gnu\
/test/./test/include/seatest.h:23: multiple definition of `seatest_simple_test_result'; CMakeFiles/NE10_imgproc_unit_test_stati\
c.dir/__/modules/imgproc/test/test_main.c.o:./obj-aarch64-linux-gnu/test/./test/include/seatest.h:23: first defined here
/usr/bin/ld: CMakeFiles/NE10_imgproc_unit_test_static.dir/__/modules/imgproc/test/test_suite_rotate.c.o:./obj-aarch64-linux-gnu\
/test/./test/include/seatest.h:23: multiple definition of `seatest_simple_test_result'; CMakeFiles/NE10_imgproc_unit_test_stati\
c.dir/__/modules/imgproc/test/test_main.c.o:./obj-aarch64-linux-gnu/test/./test/include/seatest.h:23: first defined here
/usr/bin/ld: CMakeFiles/NE10_imgproc_unit_test_static.dir/__/modules/imgproc/test/test_suite_boxfilter.c.o:./obj-aarch64-linux-\
gnu/test/./test/include/seatest.h:23: multiple definition of `seatest_simple_test_result'; CMakeFiles/NE10_imgproc_unit_test_st\
atic.dir/__/modules/imgproc/test/test_main.c.o:./obj-aarch64-linux-gnu/test/./test/include/seatest.h:23: first defined here
/usr/bin/ld: CMakeFiles/NE10_imgproc_unit_test_static.dir/src/seatest.c.o:./obj-aarch64-linux-gnu/test/./test/include/seatest.h\
:23: multiple definition of `seatest_simple_test_result'; CMakeFiles/NE10_imgproc_unit_test_static.dir/__/modules/imgproc/test/\
test_main.c.o:./obj-aarch64-linux-gnu/test/./test/include/seatest.h:23: first defined here
This debian bug covers the issue: https://bugs.debian.org/987643
The function is indeed defined twice (not just typedefed inthe header and then defined elsewhere):
seatest.h:
void (*seatest_simple_test_result)(int passed, char* reason, const char* function, unsigned int line);
seatest.c:
void (*seatest_simple_test_result)(int passed, char* reason, const char* function, unsigned int line) = seatest_simple_test_result_log;
The simplest way to do it is build with -fcommon so multiple definitions are not an error. This was the default in gcc9, but gcc10 has -fno-common as the default.
I used this patch:
Index: ne10-1.2.1/CMakeLists.txt
===================================================================
--- ne10-1.2.1.orig/CMakeLists.txt
+++ ne10-1.2.1/CMakeLists.txt
@@ -93,10 +93,10 @@ option(NE10_ENABLE_IMGPROC "Build image
set(NE10_VERSION 10)
if(BUILD_DEBUG)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing -O0 -DDEBUG -g -Wall -Wno-unused-but-set-variable")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fcommon -fno-strict-aliasing -O0 -DDEBUG -g -Wall -Wno-unused-but-set-variable")
message("-- Building type: DEBUG")
else(BUILD_DEBUG)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing -O2 -DNDEBUG")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fcommon -fno-strict-aliasing -O2 -DNDEBUG")
message("-- Building type: RELEASE")
endif(BUILD_DEBUG)
The default for what happens when you have multiple definitions of a function has changed between GCC9 and GCC10 so NE10 fails to build on GCC10 with:
This debian bug covers the issue: https://bugs.debian.org/987643
The function is indeed defined twice (not just typedefed inthe header and then defined elsewhere):
seatest.h:
void (*seatest_simple_test_result)(int passed, char* reason, const char* function, unsigned int line);seatest.c:
void (*seatest_simple_test_result)(int passed, char* reason, const char* function, unsigned int line) = seatest_simple_test_result_log;The simplest way to do it is build with -fcommon so multiple definitions are not an error. This was the default in gcc9, but gcc10 has -fno-common as the default.
I used this patch: