La compilación falla con OpenMP en Mac OS X Lion (intrínsecos memcpy y SSE)
Me he topado con el siguiente problema. El siguiente fragmento de código no se vincula en Mac OS X con ningún Xcode que probé (4.4, 4.5)
#include <stdlib.h>
#include <string.h>
#include <emmintrin.h>
int main(int argc, char *argv[])
{
char *temp;
#pragma omp parallel
{
__m128d v_a, v_ar;
memcpy(temp, argv[0], 10);
v_ar = _mm_shuffle_pd(v_a, v_a, _MM_SHUFFLE2 (0,1));
}
}
El código solo se proporciona como ejemplo y se segregará cuando lo ejecute. El punto es que no se compila. La compilación se realiza utilizando la siguiente línea.
/Applications/Xcode.app/Contents/Developer/usr/bin/gcc test.c -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk -mmacosx-version-min=10.7 -fopenmp
Undefined symbols for architecture x86_64:
"___builtin_ia32_shufpd", referenced from:
_main.omp_fn.0 in ccJM7RAw.o
"___builtin_object_size", referenced from:
_main.omp_fn.0 in ccJM7RAw.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
El código compila bien cuandono utilizando la-fopenmp
bandera paragcc
. Ahora, busqué en Google y encontré una solución para el primer problema relacionado conmemcpy
, que está sumando-fno-builtin
o-D_FORTIFY_SOURCE=0
agcc
lista de argumentos No logré resolver el segundo problema (sse intrínseco).
Alguien puede ayudarme a resolver esto? Las preguntas:
Más importante: ¿Cómo deshacerse del error "___builtin_ia32_shufpd"?¿Cuál es exactamente la razón de lamemcpy
problema, y que hace el-D_FORTIFY_SOURCE=0
bandera eventualmente hacer?