c++ - 为什么我不能链接到 shaderc?

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

我有一个正在尝试使用 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. If the external project does not use CMake, then the external project can instead directly use the generated libraries. shaderc/libshaderc/include should be added to the include path, and build/libshaderc/libshaderc_combined.a should be linked. Note that on some platforms -lpthread should also be specified.

我尝试使用 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

看来我弄乱了路径,但我不知道怎么办。

最佳答案

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

所以改变:

-llibshaderc_combined.a

到:

-lshaderc_combined

您还必须确保 -lshaderc_combined 出现在链接中 在它依赖的任何其他库之前,以及依赖它的任何目标文件或库或链接之后 可能因 undefined reference 错误而失败。

关于c++ - 为什么我不能链接到 shaderc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55643311/

相关文章:

c++ - 分段故障

opencv - OpenCV:链接: fatal error LNK1104:无法打开文件 'opencv_haartraining_engined.lib'

iphone - iPhone上的SQLite,奇怪的链接错误

c++ - 编译器/链接器错误 "undefined reference"

c++ - 通过近似选择颜色区域

c++ - 类 : handling copy constructor and destructor (C++) 内的 vector

c++ - VC++ 使用 fp :fast causes wrong (not just inaccurate) results - is this a compiler bug?

gcc - 如何使用 distcc 仅远程预处理和编译所有内容?

c++ - boost 重命名()功能不起作用

c++ - int(floatvar) 和 (int)floatvar 之间有区别吗?