背景
最近需要重拾一下CARLA和UE4仿真器,所以就开始从源码/直接二进制的 发现老问题了 三年了 每次启动都给我一句话 一点信息都没有;今天从源码编译发现了更多信息 那么 就解决一下这个 令人烦恼的:segmentation fault
内心OS:也不知道三年前 2023年1月6日自己干了什么 把... vulkan的系统路径给污染了
Error界面快速一览:

直接到达终点 解决方案(请看下面详细步骤得知是否是这个问题 ha sudo -rm -rf 是很危险的操作 切记)
原因:nvidia_icd.json的信息 就变成了一个dir!所以就导致了 vulkan无法正常启动,有两个文件夹被影响了
/etc/vulkan/implicit_layer.d/nvidia_layers.json/etc/vulkan/icd.d/nvidia_icd.json
快速解决方案:删除上面了两个文件 直接正常启动了...

详细debug步骤
从源码编译UE4 编译没有任何报错,然后开始运行:
bash
cd ~/UnrealEngine_4.26/Engine/Binaries/Linux && ./UE4Editor
就出现了这些错误log (原谅我当时没截图这个 但是保存了error信息)
bash
LoginId:93166a69224841a693b1310bd8342744-000003e8
EpicAccountId:
Caught signal 11 Segmentation fault
libvulkan.so.1!UnknownFunction(0x12727)
libvulkan.so.1!UnknownFunction(0x2792b)
libvulkan.so.1!vkEnumerateInstanceExtensionProperties(+0x99)
libUE4Editor-VulkanRHI.so!EnumerateInstanceExtensionProperties(char const*, FLayerExtension&) [/home/kin/UnrealEngine_4.26/Engine/Source/Runtime/VulkanRHI/Private/VulkanLayers.cpp:184]
libUE4Editor-VulkanRHI.so!FVulkanDynamicRHI::GetInstanceLayersAndExtensions(TArray<char const*, TSizedDefaultAllocator<32> >&, TArray<char const*, TSizedDefaultAllocator<32> >&, bool&) [/home/kin/UnrealEngine_4.26/Engine/Source/Runtime/VulkanRHI/Private/VulkanLayers.cpp:279]
libUE4Editor-VulkanRHI.so!FVulkanDynamicRHI::CreateInstance() [/home/kin/UnrealEngine_4.26/Engine/Source/Runtime/VulkanRHI/Private/VulkanRHI.cpp:386]
libUE4Editor-VulkanRHI.so!FVulkanDynamicRHI::InitInstance() [/home/kin/UnrealEngine_4.26/Engine/Source/Runtime/VulkanRHI/Private/VulkanRHI.cpp:693]
libUE4Editor-VulkanRHI.so!FVulkanDynamicRHI::Init() [/home/kin/UnrealEngine_4.26/Engine/Source/Runtime/VulkanRHI/Private/VulkanRHI.cpp:241]
libUE4Editor-RHI.so!RHIInit(bool) [/home/kin/UnrealEngine_4.26/Engine/Source/Runtime/RHI/Private/DynamicRHI.cpp:228]
UE4Editor!FEngineLoop::PreInitPreStartupScreen(char16_t const*) [/home/kin/UnrealEngine_4.26/Engine/Source/Runtime/Launch/Private/LaunchEngineLoop.cpp:2555]
UE4Editor!GuardedMain(char16_t const*) [/home/kin/UnrealEngine_4.26/Engine/Source/Runtime/Launch/Private/Launch.cpp:127]
libUE4Editor-UnixCommonStartup.so!CommonUnixMain(int, char**, int (*)(char16_t const*), void (*)()) [/home/kin/UnrealEngine_4.26/Engine/Source/Runtime/Unix/UnixCommonStartup/Private/UnixCommonStartup.cpp:264]
libc.so.6!__libc_start_main(+0xf2)
UE4Editor!_start()
然后错误信息主要是针对vulkan的 所以我和gemini沟通了一下,他让我简单运行一下vulkaninfo看看能不能行,果然

这个vulkaninfo就不行(第一行哈 第二行是我没运行)
然后第三行 得知 来 运行一下debug看看问题出现在哪里,如果出现了一长串 不用看 直接拖到最后 在error前的那一行是需要你关注的:
这是我第一次的error (对应第一个路径)
bash
DEBUG: ReadDataFilesInSearchPaths: Searching the following paths for manifest files: /etc/xdg/xdg-ubuntu/vulkan/implicit_layer.d:/etc/xdg/vulkan/implicit_layer.d:/etc/vulkan/implicit_layer.d:/usr/share/ubuntu/vulkan/implicit_layer.d:/home/kin/.local/share/flatpak/exports/share/vulkan/implicit_layer.d:/var/lib/flatpak/exports/share/vulkan/implicit_layer.d:/usr/local/share/vulkan/implicit_layer.d:/usr/share/vulkan/implicit_layer.d:/var/lib/snapd/desktop/vulkan/implicit_layer.d:/home/kin/.local/share/vulkan/
[1] 223689 segmentation fault (core dumped) VK_LOADER_DEBUG=all vulkaninfo
这是第二次error(对应第二个路径)

然后复制这一段给gemini ta就知道了 让我检查一下路径:
bash
ls -l /usr/share/vulkan/implicit_layer.d/ /etc/vulkan/implicit_layer.d/ /home/kin/.local/share/vulkan/implicit_layer.d/
然后输出是:
bash
s: cannot access '/home/kin/.local/share/vulkan/implicit_layer.d/': No such file or directory
/etc/vulkan/implicit_layer.d/:
total 4
drwxr-xr-x 2 root root 4096 jan 6 2023 nvidia_layers.json
/usr/share/vulkan/implicit_layer.d/:
total 8
-rw-r--r-- 1 root root 1242 aug 29 19:09 nvidia_layers.json
-rw-r--r-- 1 root root 472 nov 25 2021 VkLayer_MESA_device_select.json
没错你发现了 /etc/vulkan/implicit_layer.d/ 的json文件是一个dir!!!令人窒息的小 error,反正肯定不是我主动动手的
找到问题后,为了避免我删掉系统重要文件 我都先backup了一下,然后再执行这两行命令的:
bash
sudo rm -rf /etc/vulkan/implicit_layer.d/nvidia_layers.json
sudo rm -rf /etc/vulkan/icd.d/nvidia_icd.json
最后!删除完成后,我们继续运行vulkaninfo 没问题!

那么!我们就能成功启动仿真器啦!
如下是UE4:

如下是二进制CARLA包:

这次没啥参考文献和链接 主打一个gemini上大分!