RTLD_NOW и dlopen не объявлены в этой области. Qt creator vulkan dlopen - PullRequest
0 голосов
/ 09 июня 2018

Я использую g ++ и qmake в qt creator, чтобы попытаться запустить простое приложение vulkan, открывающее библиотеку vulkan, и получаю следующие ошибки:

/ home / cpnblank / Documents / vulkandev/qmakecpptest/main.cpp:12: ошибка: 'RTLD_NOW' не было объявлено в этой области void * vulkan_library = dlopen ("libvulkan.so.1", RTLD_NOW);^ ~~~~~~~

/ home / cpnblank / Documents / vulkandev / qmakecpptest / main.cpp: 12: ошибка: 'dlopen' не был объявлен в этой области void * vulkan_library = dlopen ("libvulkan.so.1 ", RTLD_NOW);^ ~~~~~

#define VK_NOPROTOTYPES
#include <iostream>
#include "vulkan.h"
#include "vk_platform.h"

using namespace std;

int main()
{
    #if defined __linux
    void *vulkan_library = dlopen("libvulkan.so.1", RTLD_NOW);
    #endif

    if (vulkan_library == nullptr) {
        std::cout << "could not connect";
    }

    cout << "Hello World!" << endl;
    return 0;
}

есть идеи?

1 Ответ

0 голосов
/ 09 июня 2018

Прочитайте документацию dlopen (3) и возьмите за привычку читать документацию каждой функции, которую вы используете.

Вам не хватает

#include <dlfcn.h>

и ваша команда ссылки должна содержать -ldl.Обе упомянуты на этой странице dlopen (3) man (вы можете попробовать man dlopen в своем терминале, чтобы получить его; см. man (1) ).

Обратите внимание, что dlopen обрабатывает специально пути, которые не содержат /.Вы, вероятно, хотите передать абсолютный путь к файлу dlopen.Таким образом, использование dlopen, скорее всего, приведет к сбою, и вам следует лучше обработать этот сбой (с dlerror (3) и exit (3) , для которого требуется <stdlib.h>):

if (vulkan_library == nullptr) {
    std::cerr << "could not connect to libvulkan: " << dlerror() << std::endl;
    exit (EXIT_FAILURE);
}

Кстати (поскольку вы #include "vulkan.h"), вам, вероятно, не нужно dlopen libvulkan.so.1, но вы должны связать вашу программу с этой библиотекой (вероятно, передавая-lvulkan в некоторую g++ команду связывания).Прочитайте Библиотека программ HowTo , Drepper's Как писать общие библиотеки , документация qmake, GNU make, как вызвать g++ компилятор , документацию по компоновщику GNU ld и т. Д.

Также помните имя искажение , из Поддержка Vulkan в Qt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...