fglrx 드라이버 및 amd app sdk를 설치한 후 OpenCL을 gcc와 연결할 수 없는 이유는 무엇입니까?

fglrx 드라이버 및 amd app sdk를 설치한 후 OpenCL을 gcc와 연결할 수 없는 이유는 무엇입니까?

이 튜토리얼을 따라 내 컴퓨터에 fglrx 드라이버를 설치했습니다.http://wiki.cchtml.com/index.php/Fedora_18_Installation_Guide, opencl-headers 패키지를 설치하고 실행할 때 마지막으로 amd app sdk를 설치했습니다.

gcc -lOpenCL someprogram.c

오류가 발생했습니다.

/usr/bin/ld: cannot find -lOpenCL
collect2: error: ld returned 1 exit status

fglrxinfo에서 다음 정보를 얻습니다.

display: :0  screen: 0
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: AMD Radeon HD 6310 Graphics
OpenGL version string: 4.2.12422 Compatibility Profile Context 13.152

그리고 /usr/lib64/에는 libopencl.so가 없습니다.

나는 그것을 실행하여 연결하는 방법을 알아 냈습니다.

gcc -I/opt/AMDAPP/include -L/opt/AMDAPP/lib/x86_64 -lOpenCL hellocl.c -o hello

답변1

ld연결할 실제 라이브러리가 필요합니다 . 헤더는 링크가 아닌 컴파일에만 필요합니다. libOpenCL.so라이브러리 경로에서 호출된 파일을 찾습니다 . ld맨페이지 에서 :

   -l namespec
   --library=namespec
       Add the archive or object file specified by namespec to the list of
       files to link.  This option may be used any number of times.  If
       namespec is of the form :filename, ld will search the library path
       for a file called filename, otherwise it will search the library path 
       for a file called libnamespec.a.

       On systems which support shared libraries, ld may also search for 
       files other than libnamespec.a. Specifically, on ELF and SunOS
       systems, ld will search a directory for a library called 
       libnamespec.so before searching for one called libnamespec.a.  
       (By convention, a ".so" extension indicates a shared library.)  
       Note that this behavior does not apply to :filename, which always
       specifies a file called
       filename.

빌드 시스템이 찾고 있는 이름에 라이브러리를 심볼릭 링크해 보세요.

ln -s /usr/lib64/libopencl.so /usr/lib64/libOpenCL.so

관련 정보