文章目录

  • 参考资料
  • 简述
  • 一. 准备环境
    • 1.1 开发环境
    • 1.2 下载 SDK
    • 1.3 安装SDK
    • 1.4 安装驱动
    • 1.5. 运行示例程序
  • 二. GLFW 安装
  • 三. GLM 安装
  • 四. 手动编译示例代码
    • 4.1 在编译示例代码的时候老是报错,找不到vulkan头文件。
    • 4.2 error adding symbols: DSO missing from command line
    • 4.3 运行示例
  • 五. 主要代码
    • 5.1 main.cpp
    • 5.2 Makefile

参考资料

  1. https://vulkan.lunarg.com/doc/sdk/1.1.106.0/linux/getting_started.html
  2. https://github.com/google/glog
  3. [pkg-config的用法]https://www.cnblogs.com/chris-cp/p/3580002.html
  4. [解决/usr/local/lib/libglog.so.0: error adding symbols: DSO missing from command line]https://blog.csdn.net/u010987458/article/details/72235408
  5. https://www.glfw.org/docs/3.3/build_guide.html#build_link_cmake_package
  6. [GLFW]https://www.glfw.org/
  7. [GLM]https://github.com/g-truc/glm

简述

本文主要是介绍如何在 ubuntu 机器上安装并编译Vulkan程序。

一. 准备环境

1.1 开发环境

sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install libglm-dev cmake libxcb-dri3-0 libxcb-present0 libpciaccess0 libpng-dev libxcb-keysyms1-dev libxcb-dri3-dev libx11-dev  libmirclient-dev libwayland-dev libxrandr-dev libxcb-ewmh-devsudo apt-get install git libpython2.7

1.2 下载 SDK

官方网站:https://vulkan.lunarg.com/ 下载SDK包:vulkan-sdk.tar.gz

cd ~/Program
mkdir vulkan
cd vulkan
tar zxf $HOME/Downloads/vulkan-sdk.tar.gz

解压后的文件目录如下:

文件夹 描述
x86_64/bin Vulkan工具和命令
x86_64/include/vulkan 编译链接头文件
x86_64/lib Vulkan加载程序库和layer运行时库
x86_64/etc/explicit_layer.d .json 用于Vulkan验证层的清单文件
config 样本层设置文件,系统配置说明
doc Khronos SPIRV,Vulkan,Loader和WSI规范
examples Vulkan程序示例
samples Vulkan的示例代码
source glslang和所选Vulkan组件的源和调试库

1.3 安装SDK

source ~/Program/vulkan/1.1.106.0/setup-env.shexport VULKAN_SDK=~/vulkan/1.1.106.0/x86_64
export PATH=$VULKAN_SDK/bin:$PATH
export LD_LIBRARY_PATH=$VULKAN_SDK/lib:$LD_LIBRARY_PATH
export VK_LAYER_PATH=$VULKAN_SDK/etc/explicit_layer.d

大功告成,检查一下:输入vulkaninfo
ubuntu@18.04L ~ vulkaninfo
Cannot create Vulkan instance.
/home/lunarg/sdk-build/Vulkan-Tools/vulkaninfo/vulkaninfo.c:921: failed with VK_ERROR_INCOMPATIBLE_DRIVER

wtf, 发生了什么?等等,貌似我们没有检查是否安装了驱动。。。

1.4 安装驱动

sudo add-apt-repository ppa:oibaf/graphics-drivers
sudo apt update
sudo apt upgrade
apt install libvulkan1 mesa-vulkan-drivers vulkan-utils// 或者试试:
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt upgrade
sudo apt install nvidia-graphics-drivers-396 nvidia-settings vulkan vulkan-utils

检查一下:输入vulkaninfo

或者:vulkaninfo --html , 在当前目录生成 vulkaninfo.html 文件,用浏览器打开,可以看到更多信息

1.5. 运行示例程序

cd Program/vulkan/1.1.160.0/examples
mkdir build
cd build
cmake ..
make

make成功后会在当前目录生成:

运行示例程序:

./vkcube


一个旋转的立方体~

二. GLFW 安装

Vulkan本身是一个与平台无关的API,不包括用于创建显示渲染结果的窗口的工具。 为了从Vulkan的跨平台优势中受益并避免X11的限制,我们将使用GLFW库来创建一个支持Windows,Linux和MacOS的窗口。
还有其他可用于此目的的库,如SDL,但GLFW的优势在于它除了窗口创建之外,还抽象了Vulkan中一些其他特定于平台的东西。
我们将从源代码安装GLFW而不是使用软件包,因为Vulkan支持需要最新版本。 可以在官方网站上找到这些来源。
将源代码解压缩到一个方便的目录,并使用CMakeLists.txt等文件打开目录中的终端。

github地址:https://github.com/glfw/glfw
解压后进入其主目录:cmake .
有报错:

-- Looking for shmat - found
-- Found X11: /usr/lib/x86_64-linux-gnu/libX11.so
CMake Error at CMakeLists.txt:220 (message):The Xinerama headers were not found-- Configuring incomplete, errors occurred!
See also "/home/jh/Program/vulkan/glfw-master/CMakeFiles/CMakeOutput.log".
See also "/home/jh/Program/vulkan/glfw-master/CMakeFiles/CMakeError.log".

缺少环境:
$ ~/Program/vulkan/glfw-master  sudo apt-get install libsdl2-dev

然后重新: cmake .

?  ~/Program/vulkan/glfw-master  cmake .
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
-- Using X11 for window creation
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jh/Program/vulkan/glfw-master

濡染没有报错,但这个也是没有成功的:缺少Doxygen
sudo apt-get install doxygen

重新: cmake .
最后: make
成功后:sudo make install

三. GLM 安装

与DirectX 12不同,Vulkan不包含用于线性代数运算的库,因此我们必须下载一个。
GLM是一个很好的库,设计用于图形API,也常用于OpenGL。
它是一个只有头的库,可以从libglm-dev包安装:

sudo apt install libglm-dev

四. 手动编译示例代码

4.1 在编译示例代码的时候老是报错,找不到vulkan头文件。

$ gcc -o main main.cpp -lglfw3
In file included from main.cpp:2:
/usr/local/include/GLFW/glfw3.h:215:12: fatal error: vulkan/vulkan.h: 没有那个文件或目录#include <vulkan/vulkan.h>^~~~~~~~~~~~~~~~~
compilation terminated.

当然是环境设置的问题:需要将头文件等拷贝到对应system文件夹

cd Program/vulkan/1.1.160.0/x86_64
sudo cp -r include/vulkan/ /usr/local/include/
sudo cp -P lib/libvulkan.so* /usr/local/lib/
sudo cp lib/libVkLayer_*.so /usr/local/lib/
sudo mkdir -p /usr/local/share/vulkan/explicit_layer.d
sudo cp etc/explicit_layer.d/VkLayer_*.json /usr/local/share/vulkan/explicit_layer.d    sudo ldconfig

4.2 error adding symbols: DSO missing from command line

make
g++ -std=c++17 -I/home/jh/Program/vulkan/1.1.160.0/x86_64/include -o VulkanTest main.cpp -L/home/jh/Program/vulkan/1.1.160.0/x86_64/lib -lvulkan -lglfw3
/usr/bin/ld: //usr/local/lib/libglfw3.a(vulkan.c.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
/usr/bin/ld: //lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [Makefile:8:VulkanTest] 错误 1

cd /usr/lib/
ll |grep -iE “liblog”
没有文件

https://github.com/google/glog
下载解压, 进入解压后的主目录,执行:
./autogen.sh && ./configure && make && make install

如果报错:autogen.sh: 5: autogen.sh: autoreconf: not found
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool

重新执行:./autogen.sh && ./configure && make && make install
可能还有权限问题:

-- Up-to-date: /usr/local/include/GLFW
CMake Error at cmake_install.cmake:41 (file):file INSTALL cannot set permissions on "/usr/local/include/GLFW"make: *** [Makefile:118:install] 错误 1

执行:
cd …
chmod a+x glog-master -R
cd glog-master
make && make install

okay,现在可以在Makefile文件中添加:-lglog

重新 make 还是会存在这个问题,笔者查阅各种资料,大部分指明在Makefile中加入 -ldl 即可,尝试后失败。
最后发现是 Makefile 文件写的有问题,改成如[#5.2]即可.

4.3 运行示例

make 成功后,会在当前目录生成 VulkanTest 可执行文件:

./VulkanTest

结果如下:

五. 主要代码

5.1 main.cpp

#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm/vec4.hpp>
#include <glm/mat4x4.hpp>#include <iostream>int main() {glfwInit();glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan window", nullptr, nullptr);uint32_t extensionCount = 0;vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);std::cout << extensionCount << " extensions supported" << std::endl;glm::mat4 matrix;glm::vec4 vec;auto test = matrix * vec;while(!glfwWindowShouldClose(window)) {glfwPollEvents();}glfwDestroyWindow(window);glfwTerminate();return 0;
}

5.2 Makefile

VULKAN_SDK_PATH = /home/jh/Program/vulkan/1.1.160.0/x86_64CFLAGS = -std=c++17 -I$(VULKAN_SDK_PATH)/include
LDFLAGS = -L$(VULKAN_SDK_PATH)/lib -lvulkan `pkg-config --static --libs glfw3`
LDFLAGS += -ldlVulkanTest: main.cppg++ $(CFLAGS) -o VulkanTest main.cpp $(LDFLAGS).PHONY: test cleantest: VulkanTestLD_LIBRARY_PATH=$(VULKAN_SDK_PATH)/libVK_LAYER_PATH=$(VULKAN_SDK_PATH)/etc/explicit_layer.d ./VulkanTestclean:rm -f VulkanTest

Vulkan入门(一)-环境配置.md相关推荐

  1. WinPcap网络编程入门——0. 环境配置及系列介绍

    WinPcap网络编程入门--0. 环境配置及系列介绍 系列教程章节直达: Winpcap网络编程入门--1. 获取设备列表: 说明:本教程适用于网络编程开发人员入门,将从底层分析 WinPcap 的 ...

  2. 【Jetson Nano 入门】环境配置汇总

    文章目录 前言 一.镜像烧写 二.PWM风扇自动调速 三.使用MicroUSB在电脑打开终端 四.VNC实现局域网及网线直连通信 五.SSH文件传输 六.状态监控软件Jtop 七.检查CUDA.Ope ...

  3. 云计算入门教程环境配置

    ###########严重声明################# 本人支持一切正规软件开发行为,接受知识付费理念. 并坚决抵制盗版行为,用于学习交流的非盈利目的的,且法律允许且支持的条件下,可以进行相 ...

  4. webpack入门+react环境配置

    小结放在前:这篇文章主要是为下一篇的react提前铺好路,webpack是一个前端资源模块化管理和打包工具,说白了就是方便我们管理自己的常用的一些代码,比如你开发中用到sass以及jade同时用到es ...

  5. webpack入门+react环境配置 1

    小结放在前:这篇文章主要是为下一篇的react提前铺好路,webpack是一个前端资源模块化管理和打包工具,说白了就是方便我们管理自己的常用的一些代码,比如你开发中用到sass以及jade同时用到es ...

  6. cordova入门——cordova环境配置

     首先,搞清楚一个概念,phonegap与cordova之间的区别.其实, phoneGap是原先的名字,Adobe将phoneGap捐给apache之后,起了另外的一个名字--apache co ...

  7. 机器学习入门编程环境配置

    1. 安装 Python3(可以直接安装anaconda而不用再去安装python和单独进行环境变量配置,并且在所有的新电脑上想要安装python,最好也是选择直接安装anaconda,不然后面用到其 ...

  8. 《MongoDB极简教程》第一章 NoSQL简史 amp; MongoDB安装amp;环境配置

    MongoDB 是一款开源的文档数据库,并且是业内领先的 NoSQL 数据库,用 C++ 编写而成. NoSQL (NoSQL = Not Only SQL ),意即"不仅仅是SQL&quo ...

  9. Android逆向 小米5X 抓包调试 环境配置

    1. 线刷救砖 2. 解除BL锁 3. 一键刷入recovery工具 刷机教程 4. 刷机需要安装的 安装包 和 面具 adb push E:\Download\shuaji\AospExtended ...

  10. CSAPP Lab1:Data Lab (虚拟机安装+Lab环境配置+函数实现)

    目录 前言 一.WIN10虚拟机安装 1.关于Vmware Workstation,Ubuntu和Vmware tools 2.安装步骤 二.Lab环境配置(安装GCC编译套装) 三.README及实 ...

最新文章

  1. 财务学习mysql_从零开始学 MySQL - 前言
  2. 一套代码小程序WebNative运行的探索02
  3. 在html中怎么在按回车的时候换到下一个文本框_史上最全的HTML、CSS知识点总结,浅显易懂。适合入门新手...
  4. 记录一次redis事故
  5. 08.认证考试注意事项
  6. 华为笔记本Win11更新时由于驱动问题引起蓝牙鼠标经常断开问题解决方法
  7. 能源36号文解读_IDC报告预测:今年中国新能源汽车销量将达116万辆,未来五年复合增长率36%_详细解读_最新资讯_热点事件...
  8. 【报告分享】“十四五”时期的战略机遇-招商证券.pdf(附下载链接)
  9. python怎么画出好看的统计图_python数据可视化之如何用matplotlib画出漂亮美观的趋势图...
  10. javascript中encodeURI和decodeURI方法
  11. [算法]用Python实现十大排序算法
  12. 关于移远EC20 4G模块 拨打电话的状态通知
  13. 阿里 P6 和 P7 的主要区别是什么?
  14. 适合初学者的PASCAL VOC2012数据集的下载及简单讲解
  15. pdf批量下载网页文件,多种情景
  16. 如何计算机网络打印机,如何共享网络打印机 共享网络打印机教程详解
  17. 孤独求败:美国海军邀黑客“黑掉军舰”
  18. python字典求平均值_查找字典中值的平均值
  19. xp系统outlook突然无法连接服务器,outlook邮箱打不开是什么原因
  20. 南阳oj入门题-A+B Problem

热门文章

  1. 超全AD常用封装库,官方下载地址分享
  2. 安装sql2012 正在启动操作系统功能NetFx3
  3. 【C++从青铜到王者】第二十七篇:特殊类设计
  4. mac安装adb工具
  5. 现代信号处理——参数估计理论(估计量的性能)
  6. VVC/JEM代码学习16:xCheckRDCostMerge2Nx2N
  7. 解决sese9 安装时多个屏幕
  8. 17_多易教育之《yiee数据运营系统》用户画像-技术架构方案篇
  9. 数学、物理、化学、生物、地理常用软件介绍(草稿)
  10. 数据库SQL(介绍)