Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 链接到nim中的vulkan_C_Visual Studio 2015_Glfw_Vulkan_Nim Lang - Fatal编程技术网

C 链接到nim中的vulkan

C 链接到nim中的vulkan,c,visual-studio-2015,glfw,vulkan,nim-lang,C,Visual Studio 2015,Glfw,Vulkan,Nim Lang,我很难弄清楚如何将更复杂的库链接到nim程序。给定以下包含目录(分为不同的行): 此附加库搜索目录(与上面的第一个目录相同): 使用此代码: #define GLFW_INCLUDE_VULKAN #include <GLFW/glfw3.h> //#include <stdio.h> GLFWwindow* init() { glfwInit(); glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);

我很难弄清楚如何将更复杂的库链接到nim程序。给定以下包含目录(分为不同的行):

此附加库搜索目录(与上面的第一个目录相同):

使用此代码:

#define GLFW_INCLUDE_VULKAN

#include <GLFW/glfw3.h>
//#include <stdio.h>

GLFWwindow* init() {
    glfwInit();

    glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
    GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan window", NULL, NULL);

    int extensionCount = 0;
    vkEnumerateInstanceExtensionProperties(NULL, &extensionCount, NULL);

    //printf("%d extensions supported\n", extensionCount);

    return window;
}

void close(GLFWwindow* window) {
    glfwDestroyWindow(window);
    glfwTerminate();
}

int shouldClose(GLFWwindow* window) {
    return glfwWindowShouldClose(window);
}

void pollEvents() {
    glfwPollEvents();
}

int main() {
    GLFWwindow* window = init();

    while (!shouldClose(window)) {
        pollEvents();
    }

    close(window);
    return 0;
}
但它只是说它无法打开文件(dll)

我是否需要在命令行中输入一些东西才能让它工作?e、 i.
-l
-p
(我能想到的每一个使用-p都不起作用,即使在颠倒斜杠和更改
URL后的分隔符为unix样式

对于nim编译器,将
#define GLFW_INCLUDE_VULKAN
放在
#INCLUDE
之前的等价物是什么

但它只是说它无法打开文件(dll)

这意味着文件
VulkanTest.dll
在用作后端(VC)的编译器的搜索路径中不可用。您可以尝试使用
--passL:“/LIBPATH:path”
添加dll所在的路径,其中
path
是指向包含dll的文件夹的路径

对于nim编译器,将#define GLFW_INCLUDE_VULKAN放在#INCLUDE之前的等价物是什么


这是不必要的,因为所有的
GLFW\u INCLUDE\u VULKAN
都包括VULKAN头。但是您需要在Nim端声明要调用的进程。有a和a可以为您实现这一点,但我相信Vulkan包装器是一个相当实验性的东西。
--passC
--passL
--cincludes
--clibdir
--clib
似乎适合C代码。无论如何,显示用于compile+link的命令序列。和原文的错误;;更新您的VulkanSDK;;您可以添加配置宏,例如,将其作为
-D
参数提供给
gcc
或在VS属性中,或在源代码中,正如您已有的那样。我切换到linux并将我的c代码编译成.so文件(并将.dll位更改为.so)。我添加了pragma
{.passC:“-I/usr/lib/glfw-3.2.1/include-I/usr/lib/VulkanSDK/1.0.30.0/x86_64/include”。}
现在,我的c代码中来自glfw和vulkan的行是未定义的。
C:\Users\[user]\Documents\visual studio 2015\Libraries\glfw-3.2.bin.WIN32\lib-vc2015;
#define GLFW_INCLUDE_VULKAN

#include <GLFW/glfw3.h>
//#include <stdio.h>

GLFWwindow* init() {
    glfwInit();

    glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
    GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan window", NULL, NULL);

    int extensionCount = 0;
    vkEnumerateInstanceExtensionProperties(NULL, &extensionCount, NULL);

    //printf("%d extensions supported\n", extensionCount);

    return window;
}

void close(GLFWwindow* window) {
    glfwDestroyWindow(window);
    glfwTerminate();
}

int shouldClose(GLFWwindow* window) {
    return glfwWindowShouldClose(window);
}

void pollEvents() {
    glfwPollEvents();
}

int main() {
    GLFWwindow* window = init();

    while (!shouldClose(window)) {
        pollEvents();
    }

    close(window);
    return 0;
}
{.link: "VulkanTest.dll".}

proc pollEvents() {.importc, dynlib: "VulkanTest.dll".}
proc init(): pointer {.importc, dynlib: "VulkanTest.dll".}
proc close(window: pointer) {.importc, dynlib: "VulkanTest.dll".}
proc shouldClose(window: pointer): cint {.importc, dynlib: "VulkanTest.dll".}

var window = init()

while shouldClose(window) != 0:
    pollEvents()

close(window)