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

10

Atualmente, está tentando compilar um programa simples fornecido no OpenCL neste site. Isso me dará o necessário DeviceInfoque eu preciso. Depois de simplesmente chamar a 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 deste site. No entanto, ainda recebo o erro acima.

Como posso resolver esse erro?

Sharan Duggirala
fonte

Respostas:

14

Seu vinculador não consegue encontrar a OpenCLbiblioteca.

Você deve ajudar o vinculador a encontrar a OpenCLbiblioteca.

Problema semelhante foi levantado aqui

A solução foi criar um link para a biblioteca para um local conhecido da lib:

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

Outra opção:

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

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

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

sudo ldconfig
Yaron
fonte
11
Isso funcionou para mim! A primeira resposta. Obrigado!
Sharan Duggirala
3

Como já declarado por Yaron, o vinculador não sabe onde encontrar a biblioteca OpenCL, ou seja, não está em nenhum dos locais que a procura.

Em vez de movê-lo para um desses lugares (por exemplo /usr/lib), sugiro informar ao vinculador onde procurar por meio da -Lbandeira. O comando seria então lido (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, Makefilepoderá simplesmente modificar o comando compilador / vinculador como este. Caso contrário, você terá que tocar no seu sistema de compilação para incluí-lo.

mbeyss
fonte
ou tentar LDFLAGSpor exemplomake 'LDFLAGS=-L/usr/lib/x86_64-linux-gnu'
steeldriver
Se você está procurando uma solução puramente temporária, isso também ajudará. No entanto eu aconselho a fazê-lo LDFLAGS=$LDFLAGS:/usr/lib/x86_64-linux-gnu/para preservar as configurações anteriores
mbeyss