Estoy tratando de aprender OpenMP, comenzando con el siguiente fragmento sencillaEclipse configuración de generación de OpenMP
#include <stdio.h>
#include <stdlib.h>
int main(void) {
#pragma omp parallel
printf("Hello OpenMP!\n");
return 0;
}
Simplemente compilar desde la línea de comandos funciona:
cls ~/Desktop $ gcc -fopenmp HelloOpenMP.c -o HelloOpenMP
cls ~/Desktop $ ./HelloOpenMP
Hello OpenMP!
Hello OpenMP!
Sin embargo, me gustaría usa Eclipse con CDT. Creé una nueva configuración de compilación "OpenMP" e intenté agregar el indicador -fopenmp
en "Varios", copiando las otras configuraciones de la configuración de compilación "Depurar".
La generación falla con
14:56:16 **** Incremental Build of configuration OpenMP for project HelloOpenMP ****
make all
Building file: ../src/HelloOpenMP.c
Invoking: GCC C Compiler
gcc -O0 -g3 -Wall -c -fmessage-length=0 -fopenmp -MMD -MP -MF"src/HelloOpenMP.d" -MT"src/HelloOpenMP.d" -o "src/HelloOpenMP.o" "../src/HelloOpenMP.c"
Finished building: ../src/HelloOpenMP.c
Building target: HelloOpenMP
Invoking: MacOS X C Linker
gcc -o "HelloOpenMP" ./src/HelloOpenMP.o
Undefined symbols for architecture x86_64:
"_GOMP_parallel_end", referenced from:
_main in HelloOpenMP.o
"_GOMP_parallel_start", referenced from:
_main in HelloOpenMP.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [HelloOpenMP] Error 1
Así que supongo que este no era el lugar adecuado para agregar la opción de compilador -fopenmp? ¿Qué configuración debo usar para compilar con OpenMP?
¿No debería estar en el vinculador también? Esta vinculación 'gcc -o" HelloOpenMP "./Src/HelloOpenMP.o' muestra que la biblioteca de openmp no se está vinculando aquí. – Raj
Tiene razón, agregando -fopenmp a las banderas del vinculador solucionó el problema. No me di cuenta de que tenía que agregar la bandera dos veces. – clstaudt
De acuerdo, lo pegaré como una respuesta. – Raj