/ usr / bin / ld: não é possível encontrar -lOpenCL

4

Atualmente, estou tentando compilar um programa simples fornecido no OpenCL em este site . Isso me dará oDeviceInfo necessário que eu preciso. Depois de simplesmente invocar um make , recebo o erro abaixo:

sharan@sharan-X550CC:~/opencl-ex/Ex1$ make 
g++ DeviceInfo.cpp -I ../../Cpp_common  -lOpenCL -o DeviceInfo
/usr/bin/ld: cannot find -lOpenCL
collect2: error: ld returned 1 exit status
Makefile:23: recipe for target 'DeviceInfo' failed
make: *** [DeviceInfo] Error 1

Agora eu instalei usando as instruções do site . No entanto, ainda recebo o erro acima.

Como posso resolver este erro?

    
por Sharan Duggirala 19.02.2018 / 09:02

2 respostas

4

O vinculador não pode encontrar a biblioteca OpenCL .

Você deve ajudar o vinculador a encontrar a biblioteca OpenCL .

Foi lançada uma questão semelhante aqui

A solução lá foi fazer um link para a biblioteca para um local conhecido de lib:

sudo ln -s /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/lib/libOpenCL.so

Outra opção:

Supondo que a biblioteca OpenCL localizada em /usr/lib/x86_64-linux-gnu/ , você também pode adicionar a pasta da biblioteca ao caminho Bibliotecas:

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu/"

Pode ser necessário atualizar o "Dynamic Linker":

sudo ldconfig
    
por Yaron 19.02.2018 / 09:18
2

Como já foi dito por Yaron, o linker não sabe onde encontrar a biblioteca OpenCL, ou seja, não está em nenhum dos lugares que procura.

Em vez de movê-lo para um desses lugares (por exemplo, /usr/lib ), sugiro informar ao vinculador onde procurá-lo por meio do sinalizador -L . O comando então leria (observe o -L/usr/lib/x86_64-linux-gnu )

g++ DeviceInfo.cpp -I ../../Cpp_common -L/usr/lib/x86_64-linux-gnu -lOpenCL -o DeviceInfo

Se você estiver usando um manuscrito Makefile , você pode simplesmente modificar o comando compilador / vinculador como este. Caso contrário, você terá que tocar em seu sistema de compilação como incluí-lo.

    
por mbeyss 19.02.2018 / 11:20