почему ссылка на libOpenCL.dylib не работает с неопределенным символом

Я пытаюсь собрать библиотеку pocl на MacOS.

Система:

      MBP 16" 2019
Intel i9, AMD Radeon 5500m
Mac OS 12.4
using bash, instead of zsh
llvm from home-brew, -version 14

У меня есть следующее в моем .bash_profile для настройки среды сборки

      export PATH=/usr/local/opt/llvm/bin:$PATH
export CC=clang
export CMAKE_C_COMPILER=clang
export CXX=clang++
export CMAKE_CXX_COMPILER=clang++

Я иду и клонирую репо с помощью git, cd в исходный каталог, mkdir build

Затем вbuild/бегать:

cmake .. -DENABLE_TESTS=OFF -DENABLE_EXAMPLES=OFF -DENABLE_ICD=OFF

Конфиг работает, а потом, когда я запускаю make, все собирается и доходит до конца, но затем выдает следующую ошибку:

      [100%] Linking C executable poclcc
clang-14: warning: argument unused during compilation: '-pie' [-Wunused-command-line-argument]
Undefined symbols for architecture x86_64:
  "_clBuildProgram", referenced from:
      _main in poclcc.c.o
      _poclu_load_program_multidev in libpoclu.a(misc.c.o)
  "_clCreateCommandQueue", referenced from:
      _poclu_get_any_device2 in libpoclu.a(misc.c.o)
      _poclu_get_multiple_devices in libpoclu.a(misc.c.o)
  "_clCreateContext", referenced from:
      _main in poclcc.c.o
      _poclu_get_any_device2 in libpoclu.a(misc.c.o)
      _poclu_get_multiple_devices in libpoclu.a(misc.c.o)
  "_clCreateContextFromType", referenced from:
      _poclu_create_any_context in libpoclu.a(misc.c.o)
  "_clCreateProgramWithBinary", referenced from:
      _poclu_load_program_multidev in libpoclu.a(misc.c.o)
  "_clCreateProgramWithIL", referenced from:
      _poclu_load_program_multidev in libpoclu.a(misc.c.o)
  "_clCreateProgramWithSource", referenced from:
      _main in poclcc.c.o
      _poclu_load_program_multidev in libpoclu.a(misc.c.o)
  "_clGetDeviceIDs", referenced from:
      _main in poclcc.c.o
      _poclu_get_any_device2 in libpoclu.a(misc.c.o)
      _poclu_get_multiple_devices in libpoclu.a(misc.c.o)
  "_clGetDeviceInfo", referenced from:
      _main in poclcc.c.o
      _poclu_load_program_multidev in libpoclu.a(misc.c.o)
  "_clGetPlatformIDs", referenced from:
      _main in poclcc.c.o
      _poclu_create_any_context in libpoclu.a(misc.c.o)
      _poclu_get_any_device2 in libpoclu.a(misc.c.o)
      _poclu_get_multiple_devices in libpoclu.a(misc.c.o)
  "_clGetProgramBuildInfo", referenced from:
      _main in poclcc.c.o
      _poclu_show_program_build_log in libpoclu.a(misc.c.o)
  "_clGetProgramInfo", referenced from:
      _main in poclcc.c.o
      _poclu_show_program_build_log in libpoclu.a(misc.c.o)
  "_clReleaseContext", referenced from:
      _main in poclcc.c.o
  "_clReleaseProgram", referenced from:
      _main in poclcc.c.o
ld: symbol(s) not found for architecture x86_64

Я проверил, и libOpenCL.dylib был успешно собран вpocl/build/lib/CL/каталог. В качестве проверки я попытался скомпилироватьclinfoс прямой ссылкой на эту библиотеку, и это дало мне тот же набор сообщений об ошибках, что и выше.

Бегnm libOpenCL.dylib | grep clBuildProgramпечатает следующее:

0000000000013850 t _clBuildProgram

Так что это там, но это символ локального текстового раздела. Я на самом деле не знаю, что это значит, и означает ли это, что это должно работать или не должно работать. Я на самом деле не понимаю, в чем проблема, или почему эта ссылка не работает, или что с этим делать. Ищу какое-то руководство по этому поводу.

0 ответов

Другие вопросы по тегам