为什么我不能 link 对抗 shaderc?
Why can't I link against shaderc?
我有一个正在尝试使用 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
库随附的文档明确指出:
- 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.
我尝试 link 使用 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
如您所见,指定的 linking 路径与安装路径匹配(libraries/ 包含我的项目使用的所有第三方库)。
然而 linker 抱怨:
/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
出现在链接中
sequence before 它依赖的任何其他库,以及 after 依赖它的任何目标文件或库,或链接
可能会因未定义的引用错误而失败。
我有一个正在尝试使用 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
库随附的文档明确指出:
- 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, andbuild/libshaderc/libshaderc_combined.a
should be linked. Note that on some platforms-lpthread
should also be specified.
我尝试 link 使用 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
如您所见,指定的 linking 路径与安装路径匹配(libraries/ 包含我的项目使用的所有第三方库)。
然而 linker 抱怨:
/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
出现在链接中
sequence before 它依赖的任何其他库,以及 after 依赖它的任何目标文件或库,或链接
可能会因未定义的引用错误而失败。