This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
[RFC] Difference between gcc and g++ drivers
- From: Andrew Senkevich <andrew dot n dot senkevich at gmail dot com>
- To: GCC Mailing List <gcc at gcc dot gnu dot org>
- Date: Wed, 24 Jun 2015 17:12:50 +0300
- Subject: [RFC] Difference between gcc and g++ drivers
- Authentication-results: sourceware.org; auth=none
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