C ++宏从.cpp初始化在.h中声明的变量

时间:2019-03-07 19:57:48

标签: c++

我正在尝试基于操作系统加载库,这是我到目前为止所做的。尽管我不明白为什么在.cpp文件中为vulkan_lib变量出现以下错误:“此声明没有存储类或类型说明符”。

.cpp文件:

#include "vulkan_commons.h"

namespace vk {
    #if defined _WIN32
        vulkan_lib = LoadLibrary(L"vulkan-1.dll");
    #elif defined __linux
        vulkan_lib = dlopen("libvulkan.so.1", RTLD_NOW);
    #endif
}

.h文件:

#ifndef VULKAN_COMMONS_H
#define VULKAN_COMMONS_H

namespace vk {

#if defined _WIN32
    #include <Windows.h>
    #define LoadFunction GetProcAddress
    #define OS_LIB       HMODULE
#elif defined __linux
    #include <dlfcn.h>
    #define LoadFunction dlsym
    #define OS_LIB       void*
#else
    #error
#endif

OS_LIB vulkan_lib;

}

#endif

1 个答案:

答案 0 :(得分:2)

在标题中:

extern OS_LIB vulkan_lib;

您需要extern以便不在每个TU中都定义vulkan_lib

在cpp中:

OS_LIB vulkan_lib = ...

您需要对其进行定义