Почему я не могу ссылаться на Shaderc? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть проект vulkan, который пытается использовать shaderc.

Библиотека была установлена ​​по следующему пути (система linux):

./libraries/shaderc/build/libshaderc

В этом каталоге lsдает:

CMakeFiles                         shaderc_combined_shaderc_test
cmake_install.cmake                shaderc_c_smoke_test
CTestTestfile.cmake                shaderc_shaderc_cpp_test
libshaderc.a                       shaderc_shaderc_private_test
libshaderc_combined.a              shaderc_shaderc_test
libshaderc_shared.so               shaderc_shared_shaderc_cpp_test
libshaderc_shared.so.1             shaderc_shared_shaderc_private_test
shaderc_combined.ar                shaderc_shared_shaderc_test
shaderc_combined_shaderc_cpp_test

В документации, поставляемой с библиотекой, прямо говорится:

Если внешний проект не использует CMake, то вместо этого внешний проект может напрямую использовать сгенерированные библиотеки.shaderc/libshaderc/include должен быть добавлен к пути включения, а build/libshaderc/libshaderc_combined.a должен быть связан.Обратите внимание, что на некоторых платформах также следует указывать -lpthread.

Я пытаюсь связать проект следующим образом, используя make:

g++ -o "../build/VulkanEngine" obj/Debug/DebugCallback.o obj/Debug/Device.o obj/Debug/log.o obj/Debug/ImageViews.o obj/Debug/Instance.o obj/Debug/Pipeline.o obj/Debug/RenderPass.o obj/Debug/Surface.o obj/Debug/SwapChain.o obj/Debug/VkExtensionsStubs.o obj/Debug/GLFW_tools.o obj/Debug/main.o    -L../libraries/glfw-3.2.1/bin -L../libraries/glm/bin/glm -L../libraries/vulkansdk-linux/1.1.97.0/x86_64/lib -L../libraries/shaderc/build/libshaderc -lstdc++fs -lglfw -lglm_static-lvulkan -llibshaderc_combined.a

В частности обратите внимание на аргумент-L../libraries/shaderc/build/libshaderc: и аргумент -llibshaderc_combined.a

Как видите, указанный путь компоновки совпадает с путем установки (библиотеки / содержит все сторонние библиотеки, используемые моим проектом).

Однакокомпоновщик жалуется:

/usr/bin/ld: cannot find -llibshaderc_combined.a
collect2: error: ld returned 1 exit status
make[1]: *** [VulkanEngine.make:119: ../build/VulkanEngine] Error 1
make: *** [Makefile:30: VulkanEngine] Error 2

Так что, похоже, я как-то испортил путь, но не знаю как.

1 Ответ

1 голос
/ 12 апреля 2019

Параметр связывания -lname предписывает компоновщику выполнять поиск в указанных (-Ldir) и каталогах поиска по умолчанию для любого из файлов libname.so (общая библиотека) или libname.a (статическая библиотека).Если он находит какой-либо из них, он больше не ищет каталоги и вводит этот файл в связь.Если он найдет их обоих в одном каталоге поиска, он предпочтет libname.so.

. Так что измените:

-llibshaderc_combined.a

на:

-lshaderc_combined

Вы должнытакже убедитесь, что -lshaderc_combined присутствует в последовательности связей до любой другой библиотеки, от которой он зависит, и после любого объектного файла или библиотеки, которые зависят от него, или ответственность несет ответственностьпотерпеть неудачу с неопределенными ссылочными ошибками.

...