programing

GCC에 OpenMP 지정

elecom 2023. 9. 25. 22:14
반응형

GCC에 OpenMP 지정

OpenMP의 경우, 내 코드가 지시어(예: #pragmaomp ... 등)를 사용하지 않고 API의 함수(예: omp_get_thread_num())를 사용할 때,

  1. -fopenmp를 사용하는 대신 gcc에 libgomp.a를 직접 지정하는 것이 작동하지 않는 이유는 다음과 같습니다.

    gcc hello.c /usr/lib/gcc/i686-linux-gnu/4.4/libgomp.a  -o hello
    

    업데이트: libgomp.a로의 링크는 작동하지 않지만 libgomp.so 로의 링크는 작동한다는 것을 방금 발견했습니다.OpenMP는 정적 링크가 될 수 없다는 뜻입니까?

  2. 라이브러리 파일을 지정하지 않고 -fopenmp만 작동하는 이유

    gcc hello.c -fopenmp -o hello
    

    업데이트: 즉, -fopenmp를 사용할 때 libgomp.so 에 명시적인 링크가 필요하지 않은 이유는 무엇입니까?

  3. 이것이 컴파일되는 이유는 무엇입니까?

    gcc hello.c -L/usr/lib/gcc/i686-linux-gnu/4.4/ -lgomp -o hello
    

    코드에 OpenMP 지시가 있으면 무시합니까?

감사합니다!

일반적으로 지시와 기능은 서로 다르다는 것을 명심해야 합니다; 전자는 다음에 의해 통제됩니다.-fopenmp그리고 후자는 OpenMP 라이브러리에 링크하여 제어합니다.

  1. (댓글을 통합하도록 업데이트됨)사용해 보십시오.-fopenmp그리고.-staticOpenMP를 정적으로 연결하는 옵션. 왜냐하면 이것은-lgomp -lrt, 다음 명령은 당신이 위치를 지정하지 않는 한 정확하게 컴파일되지 않습니다.librt.a.

    gcc hello.c /usr/lib/gcc/i686-linux-gnu/4.4/libgomp.a  -o hello
    
  2. (댓글을 통합하기 위해 업데이트됨) OpenMP 라이브러리가 이미 라이브러리 경로에 있고 시스템의 동적 링크기가 다음 명령어를 올바르게 컴파일하고 있다고 생각합니다.libgomp.so.

    gcc hello.c -fopenmp -o hello
    
  3. 다음 명령은 OpenMP용 공유 개체에 링크되어 있으므로 올바르게 컴파일되고 있을 것입니다(libgomp.so). 참고:-static옵션이 사용되지 않습니다.

    gcc hello.c -L/usr/lib/gcc/i686-linux-gnu/4.4/ -lgomp -o hello
    

    지정하지 않으시면-fopenmpoption, OpenMP 지시는 무시해야 합니다.

언급URL : https://stackoverflow.com/questions/6351961/specify-openmp-to-gcc

반응형