C 链接到nim中的vulkan
我很难弄清楚如何将更复杂的库链接到nim程序。给定以下包含目录(分为不同的行): 此附加库搜索目录(与上面的第一个目录相同): 使用此代码: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);
#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)