openppl-public / ppl.cv

ppl.cv is a high-performance image processing library of openPPL supporting various platforms.
Apache License 2.0
484 stars 108 forks source link

compile failed on Linux x64 with GCC9.3 #40

Closed zchrissirhcz closed 2 years ago

zchrissirhcz commented 2 years ago

error message

[ 99%] Linking CXX executable bin/pplcv_benchmark
[ 99%] Building CXX object CMakeFiles/pplcv_unittest.dir/src/ppl/cv/x86/remap_unittest.cpp.o
/usr/bin/ld: libpplcv_static.a(arithmetic.cpp.o): in function `unsigned int ppl::cv::x86::Add<float, 1>(int, int, int, float const*, int, float const*, int, float*)':
arithmetic.cpp:(.text._ZN3ppl2cv3x863AddIfLi1EEEjiiiPKT_iS5_iPS3_[_ZN3ppl2cv3x863AddIfLi1EEEjiiiPKT_iS5_iPS3_]+0x1b8): undefined reference to `unsigned int ppl::cv::x86::fma::Add_fma<float, 1>(int, int, int, float const*, int, float const*, int, float*)'
/usr/bin/ld: libpplcv_static.a(arithmetic.cpp.o): in function `unsigned int ppl::cv::x86::Add<float, 3>(int, int, int, float const*, int, float const*, int, float*)':
arithmetic.cpp:(.text._ZN3ppl2cv3x863AddIfLi3EEEjiiiPKT_iS5_iPS3_[_ZN3ppl2cv3x863AddIfLi3EEEjiiiPKT_iS5_iPS3_]+0x1be): undefined reference to `unsigned int ppl::cv::x86::fma::Add_fma<float, 3>(int, int, int, float const*, int, float const*, int, float*)'
/usr/bin/ld: libpplcv_static.a(arithmetic.cpp.o): in function `unsigned int ppl::cv::x86::Add<float, 4>(int, int, int, float const*, int, float const*, int, float*)':
arithmetic.cpp:(.text._ZN3ppl2cv3x863AddIfLi4EEEjiiiPKT_iS5_iPS3_[_ZN3ppl2cv3x863AddIfLi4EEEjiiiPKT_iS5_iPS3_]+0x1be): undefined reference to `unsigned int ppl::cv::x86::fma::Add_fma<float, 4>(int, int, int, float const*, int, float const*, int, float*)'
/usr/bin/ld: libpplcv_static.a(arithmetic.cpp.o): in function `unsigned int ppl::cv::x86::Mul<float, 1>(int, int, int, float const*, int, float const*, int, float*, float)':
arithmetic.cpp:(.text._ZN3ppl2cv3x863MulIfLi1EEEjiiiPKT_iS5_iPS3_f[_ZN3ppl2cv3x863MulIfLi1EEEjiiiPKT_iS5_iPS3_f]+0x1ff): undefined reference to `unsigned int ppl::cv::x86::fma::Mul_fma<float, 1>(int, int, int, float const*, int, float const*, int, float*, float)'
/usr/bin/ld: libpplcv_static.a(arithmetic.cpp.o): in function `unsigned int ppl::cv::x86::Mul<float, 3>(int, int, int, float const*, int, float const*, int, float*, float)':
arithmetic.cpp:(.text._ZN3ppl2cv3x863MulIfLi3EEEjiiiPKT_iS5_iPS3_f[_ZN3ppl2cv3x863MulIfLi3EEEjiiiPKT_iS5_iPS3_f]+0x205): undefined reference to `unsigned int ppl::cv::x86::fma::Mul_fma<float, 3>(int, int, int, float const*, int, float const*, int, float*, float)'
/usr/bin/ld: libpplcv_static.a(arithmetic.cpp.o): in function `unsigned int ppl::cv::x86::Mul<float, 4>(int, int, int, float const*, int, float const*, int, float*, float)':
arithmetic.cpp:(.text._ZN3ppl2cv3x863MulIfLi4EEEjiiiPKT_iS5_iPS3_f[_ZN3ppl2cv3x863MulIfLi4EEEjiiiPKT_iS5_iPS3_f]+0x205): undefined reference to `unsigned int ppl::cv::x86::fma::Mul_fma<float, 4>(int, int, int, float const*, int, float const*, int, float*, float)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/pplcv_benchmark.dir/build.make:809:bin/pplcv_benchmark] 错误 1
make[1]: *** [CMakeFiles/Makefile2:1994:CMakeFiles/pplcv_benchmark.dir/all] 错误 2
make[1]: *** 正在等待未完成的任务....
[ 99%] Building CXX object CMakeFiles/pplcv_unittest.dir/src/ppl/cv/x86/resize_unittest.cpp.o
[ 99%] Building CXX object CMakeFiles/pplcv_unittest.dir/src/ppl/cv/x86/rotate_unittest.cpp.o
[ 99%] Building CXX object CMakeFiles/pplcv_unittest.dir/src/ppl/cv/x86/setvalue_unittest.cpp.o
[ 99%] Building CXX object CMakeFiles/pplcv_unittest.dir/src/ppl/cv/x86/sobel_unittest.cpp.o
[100%] Building CXX object CMakeFiles/pplcv_unittest.dir/src/ppl/cv/x86/split_unittest.cpp.o
[100%] Building CXX object CMakeFiles/pplcv_unittest.dir/src/ppl/cv/x86/transpose_unittest.cpp.o
[100%] Building CXX object CMakeFiles/pplcv_unittest.dir/src/ppl/cv/x86/warpaffine_unittest.cpp.o
[100%] Building CXX object CMakeFiles/pplcv_unittest.dir/src/ppl/cv/x86/warpperspective_unittest.cpp.o
[100%] Linking CXX executable bin/pplcv_unittest
/usr/bin/ld: libpplcv_static.a(arithmetic.cpp.o): in function `unsigned int ppl::cv::x86::Add<float, 1>(int, int, int, float const*, int, float const*, int, float*)':
arithmetic.cpp:(.text._ZN3ppl2cv3x863AddIfLi1EEEjiiiPKT_iS5_iPS3_[_ZN3ppl2cv3x863AddIfLi1EEEjiiiPKT_iS5_iPS3_]+0x1b8): undefined reference to `unsigned int ppl::cv::x86::fma::Add_fma<float, 1>(int, int, int, float const*, int, float const*, int, float*)'
/usr/bin/ld: libpplcv_static.a(arithmetic.cpp.o): in function `unsigned int ppl::cv::x86::Add<float, 3>(int, int, int, float const*, int, float const*, int, float*)':
arithmetic.cpp:(.text._ZN3ppl2cv3x863AddIfLi3EEEjiiiPKT_iS5_iPS3_[_ZN3ppl2cv3x863AddIfLi3EEEjiiiPKT_iS5_iPS3_]+0x1be): undefined reference to `unsigned int ppl::cv::x86::fma::Add_fma<float, 3>(int, int, int, float const*, int, float const*, int, float*)'
/usr/bin/ld: libpplcv_static.a(arithmetic.cpp.o): in function `unsigned int ppl::cv::x86::Add<float, 4>(int, int, int, float const*, int, float const*, int, float*)':
arithmetic.cpp:(.text._ZN3ppl2cv3x863AddIfLi4EEEjiiiPKT_iS5_iPS3_[_ZN3ppl2cv3x863AddIfLi4EEEjiiiPKT_iS5_iPS3_]+0x1be): undefined reference to `unsigned int ppl::cv::x86::fma::Add_fma<float, 4>(int, int, int, float const*, int, float const*, int, float*)'
/usr/bin/ld: libpplcv_static.a(arithmetic.cpp.o): in function `unsigned int ppl::cv::x86::Mul<float, 1>(int, int, int, float const*, int, float const*, int, float*, float)':
arithmetic.cpp:(.text._ZN3ppl2cv3x863MulIfLi1EEEjiiiPKT_iS5_iPS3_f[_ZN3ppl2cv3x863MulIfLi1EEEjiiiPKT_iS5_iPS3_f]+0x1ff): undefined reference to `unsigned int ppl::cv::x86::fma::Mul_fma<float, 1>(int, int, int, float const*, int, float const*, int, float*, float)'
/usr/bin/ld: libpplcv_static.a(arithmetic.cpp.o): in function `unsigned int ppl::cv::x86::Mul<float, 3>(int, int, int, float const*, int, float const*, int, float*, float)':
arithmetic.cpp:(.text._ZN3ppl2cv3x863MulIfLi3EEEjiiiPKT_iS5_iPS3_f[_ZN3ppl2cv3x863MulIfLi3EEEjiiiPKT_iS5_iPS3_f]+0x205): undefined reference to `unsigned int ppl::cv::x86::fma::Mul_fma<float, 3>(int, int, int, float const*, int, float const*, int, float*, float)'
/usr/bin/ld: libpplcv_static.a(arithmetic.cpp.o): in function `unsigned int ppl::cv::x86::Mul<float, 4>(int, int, int, float const*, int, float const*, int, float*, float)':
arithmetic.cpp:(.text._ZN3ppl2cv3x863MulIfLi4EEEjiiiPKT_iS5_iPS3_f[_ZN3ppl2cv3x863MulIfLi4EEEjiiiPKT_iS5_iPS3_f]+0x205): undefined reference to `unsigned int ppl::cv::x86::fma::Mul_fma<float, 4>(int, int, int, float const*, int, float const*, int, float*, float)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/pplcv_unittest.dir/build.make:841:bin/pplcv_unittest] 错误 1
make[1]: *** [CMakeFiles/Makefile2:1954:CMakeFiles/pplcv_unittest.dir/all] 错误 2
make: *** [Makefile:156:all] 错误 2

Environment and Reproduce

same as #39 , only difference is:

unset CC
unset CXX

which will use GCC instead of Clang for compilation.

zchrissirhcz commented 2 years ago

cpuinfo

python -m pip install -U pip
python -m pip install -U py-cpuinfo
cpuinfo

Python Version: 3.8.5.final.0 (64 bit) Cpuinfo Version: 7.0.0 Vendor ID Raw: GenuineIntel Hardware Raw: Brand Raw: Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz Hz Advertised Friendly: 2.8000 GHz Hz Actual Friendly: 3.8129 GHz Hz Advertised: (2800000000, 0) Hz Actual: (3812922000, 0) Arch: X86_64 Bits: 64 Count: 6 Arch String Raw: x86_64 L1 Data Cache Size: L1 Instruction Cache Size: L2 Cache Size: 65536 L2 Cache Line Size: 256 L2 Cache Associativity: 6 L3 Cache Size: 9437184 Stepping: 10 Model: 158 Family: 6 Processor Type: Flags: 3dnowprefetch, abm, acpi, adx, aes, aperfmperf, apic, arat, arch_perfmon, art, avx, avx2, bmi1, bmi2, bts, clflush, clflushopt, cmov, constant_tsc, cpuid, cpuid_fault, cx16, cx8, de, ds_cpl, dtes64, dtherm, dts, ept, ept_ad, erms, est, f16c, flexpriority, flush_l1d, fma, fpu, fsgsbase, fxsr, ht, hwp, hwp_act_window, hwp_epp, hwp_notify, ibpb, ibrs, ida, intel_pt, invpcid, invpcid_single, lahf_lm, lm, mca, mce, md_clear, mmx, monitor, movbe, mpx, msr, mtrr, nonstop_tsc, nopl, nx, osxsave, pae, pat, pbe, pcid, pclmulqdq, pdcm, pdpe1gb, pebs, pge, pln, pni, popcnt, pse, pse36, pti, pts, rdrand, rdrnd, rdseed, rdtscp, rep_good, sdbg, sep, sgx, sgx_lc, smap, smep, ss, ssbd, sse, sse2, sse4_1, sse4_2, ssse3, stibp, syscall, tm, tm2, tpr_shadow, tsc, tsc_adjust, tsc_deadline_timer, tscdeadline, vme, vmx, vnmi, vpid, x2apic, xgetbv1, xsave, xsavec, xsaveopt, xsaves, xtopology, xtpr

From the cpuinfo command result, there is FMA in my machine.