Hi,
Glibc 2.22 will have libm.so implemented as linker script helping to
link as needed against vector math library libmvec.so without addition
of -lmvec (for not static builds). Another words -lm is enough to link
against libmvec.so.
But g++ driver inserts -lm for linker command, gcc griver not.
It gives different behavior of g++ and gcc (I mean Glibc 2.22
installed system-wide):
g++ -fopenmp -ffast-math -O1 cos.c (compiled, -lm passed to linker by driver)
gcc -fopenmp -ffast-math -O1 cos.c (linker error because of no -lm passed)
/tmp/cclVmUxv.o: In function `main':
cos.c:(.text+0x3a): undefined reference to `_ZGVbN2v_cos'
cos.c:(.text+0x6b): undefined reference to `cos'
collect2: error: ld returned 1 exit status
cos.c:
#include <math.h>
int N = 3200;
double b[3200];
double a[3200];
int main (void)
{
int i;
#pragma omp simd
for (i = 0; i < N; i += 1)
{
b[i] = cos (a[i]);
}
return (0);
}
For static builds with gcc needed to add both options with the
following order: -lmvec -lm.
For static builds with g++ needed to add only -lmvec.
Can anybody tell something about this difference in drivers?
May be needed fix for g++ driver to add also -lmvec if GLIBC version
>= 2.22 found on configure?
May be some other way needed to achieve similar drivers behavior?
--
WBR,
Andrew