C++ 为什么可以';我不能链接到shaderc吗?

C++ 为什么可以';我不能链接到shaderc吗?,c++,g++,linker-errors,static-linking,vulkan,C++,G++,Linker Errors,Static Linking,Vulkan,我有一个vulkan项目正在尝试使用shaderc 库安装在以下路径(linux系统)下: 在此目录中执行ls,可获得: CMakeFiles shaderc_combined_shaderc_test cmake_install.cmake shaderc_c_smoke_test CTestTestfile.cmake shaderc_shaderc_cpp_test libshade

我有一个vulkan项目正在尝试使用shaderc

库安装在以下路径(linux系统)下:

在此目录中执行
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
    应添加到include路径,并且
    build/libshaderc/libshaderc\u组合。应链接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_的组合。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
    

    看来我不知怎么搞砸了这条路,但我不知道;不知道如何操作。

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

    因此,改变:

    -llibshaderc_combined.a
    
    致:

    您还必须确保链接中出现
    -lshaderc\u combined
    序列在它所依赖的任何其他库之前,以及在它所依赖的任何对象文件或库或链接之后 容易因未定义的引用错误而失败

    -llibshaderc_combined.a
    
    -lshaderc_combined