【问题标题】:Why can't I link against shaderc?为什么我不能链接到 shaderc?
【发布时间】:2019-04-12 01:41:21
【问题描述】:

我有一个尝试使用 shaderc 的 vulkan 项目。

该库安装在以下路径下(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

库提供的文档明确指出:

  1. 如果外部项目不使用 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

如您所见,指定的链接路径与安装路径匹配(libraries/ 包含我的项目使用的所有第三方库)。

但是链接器抱怨:

/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

看来我以某种方式弄乱了路径,但我不知道怎么做。

【问题讨论】:

    标签: c++ g++ linker-errors static-linking vulkan


    【解决方案1】:

    -lname 链接选项指示链接器在指定的 (-Ldir) 和任何一个的默认库搜索目录 文件libname.so(共享库)或libname.a(静态库)。如果它找到它们中的任何一个,它就会搜索 没有更多的目录并将该文件输入到链接中。如果它发现 他们都在同一个搜索目录中,那么它会更喜欢libname.so

    所以改变:

    -llibshaderc_combined.a
    

    到:

    -lshaderc_combined
    

    您还必须确保-lshaderc_combined 出现在链接中 序列之前它依赖的任何其他库,之后依赖它的任何目标文件或库,或链接 可能会因未定义的引用错误而失败。

    【讨论】:

      猜你喜欢
      • 2015-12-13
      • 2012-01-07
      • 2023-03-03
      • 1970-01-01
      • 2021-05-18
      • 2014-03-22
      • 2017-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多