Atualmente tentando compilar um programa simples fornecido em OpenCL a partir deesselocal na rede Internet. Isso me dará o DeviceInfo
que preciso. Depois de simplesmente invocar 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 deesselocal na rede Internet. No entanto, ainda recebo o erro acima.
Como posso resolver esse erro?
Responder1
Seu vinculador não consegue encontrar a OpenCL
biblioteca.
Você deve ajudar o vinculador a encontrar a OpenCL
biblioteca.
Questão semelhante foi levantadaaqui
A solução foi criar um link da 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 OpenCL
a biblioteca esteja 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
Responder2
Como já dito por Yaron o linker não sabe onde encontrar a biblioteca OpenCL, ou seja, ela não está em nenhum dos locais onde a procura.
Em vez de movê-lo para um desses locais (por exemplo /usr/lib
), sugiro informar ao vinculador onde procurá-lo por meio do -L
sinalizador. 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, Makefile
você pode simplesmente modificar o comando do compilador/vinculador como este. Caso contrário, você terá que alterar seu sistema de compilação para incluí-lo.