Не может определить объект импорта dll C++

Я пытаюсь скомпилировать dll с открытым исходным кодом из git, получаю следующую ошибку:

Ошибка (активная) не может определить сущность dllimport cppkafka

Ошибка 'cppkafka :: Queue :: DEFAULT_TIMEOUT': определение статического элемента данных dllimport недопустимо

Ошибка C2491 'cppkafka :: KafkaHandleBase :: DEFAULT_TIMEOUT': определение статического элемента данных dllimport недопустимо

Ошибка C2491 'cppkafka :: BackoffPerformer :: DEFAULT_INITIAL_BACKOFF': определение статического элемента данных dllimport не разрешено

Ошибка C2491 'cppkafka :: BackoffPerformer :: DEFAULT_BACKOFF_STEP': определение статического элемента данных dllimport не разрешено

Ошибка C2491 'cppkafka :: BackoffPerformer :: DEFAULT_MAXIMUM_BACKOFF': определение статического элемента данных dllimport не разрешено

Ошибка C2491 'cppkafka :: BackoffPerformer :: DEFAULT_MAXIMUM_RETRIES': определение статического элемента данных dllimport не разрешено

классы:

вот заголовочный файл:

//#ifdef BUILDING_MYDLL
//#define CPPKAFKA_API __declspec(dllexport)
//#else
//#define CPPKAFKA_API __declspec(dllimport)
//#endif
#ifndef CPPKAFKA_BACKOFF_PERFORMER_H
#define CPPKAFKA_BACKOFF_PERFORMER_H

#include <chrono>
#include <functional>
#include <thread>
#include "consumer.h"

namespace cppkafka {

/**
 * 
 */
class CPPKAFKA_API BackoffPerformer {
public:
    using TimeUnit = std::chrono::milliseconds;
    static const TimeUnit DEFAULT_INITIAL_BACKOFF;
    static const TimeUnit DEFAULT_BACKOFF_STEP;
    static const TimeUnit DEFAULT_MAXIMUM_BACKOFF;
    static const size_t DEFAULT_MAXIMUM_RETRIES;

    /**
     * The backoff policy to use
     */
    enum class BackoffPolicy {
        LINEAR,
        EXPONENTIAL
    };

    /**
     * Constructs an instance of backoff performer
     * 
     * By default, the linear backoff policy is used
     */
    BackoffPerformer();

    /**
     * \brief Sets the backoff policy
     *
     * \param policy The backoff policy to be used
     */
    void set_backoff_policy(BackoffPolicy policy);

    /**
     * \brief Sets the initial backoff
     *
     * The first time a commit fails, this will be the delay between the request is sent
     * and we re-try doing so 
     *
     * \param value The value to be used
     */
    void set_initial_backoff(TimeUnit value);

    /**
     * \brief Sets the backoff step
     *
     * When using the linear backoff policy, this will be the delay between sending a request
     * that fails and re-trying it
     *
     * \param value The value to be used
     */
    void set_backoff_step(TimeUnit value);

    /**
     * \brief Sets the maximum backoff
     *
     * The backoff used will never be larger than this number
     *
     * \param value The value to be used
     */
    void set_maximum_backoff(TimeUnit value);

    /**
     * \brief Sets the maximum number of retries for the commit operation
     *
     * \param value The number of retries before giving up
     *
     * \remark Setting value to 0 is equivalent to 1, i.e. it will try at least once
     */
    void set_maximum_retries(size_t value);

    /**
     * \brief Executes an action and backs off if it fails
     *
     * This will call the functor and will retry in case it returns false
     *
     * \param callback The action to be executed
     */
    template <typename Functor>
    void perform(const Functor& callback) {
        TimeUnit backoff = initial_backoff_;
        size_t retries = maximum_retries_;
        while (retries--) {
            auto start = std::chrono::steady_clock::now();
            // If the callback returns true, we're done
            if (callback()) {
                return;
            }
            auto end = std::chrono::steady_clock::now();
            auto time_elapsed = end - start;
            // If we still have time left, then sleep
            if (time_elapsed < backoff) {
                std::this_thread::sleep_for(backoff - time_elapsed);
            }
            // Increase out backoff depending on the policy being used
            backoff = increase_backoff(backoff);
        }
    }
private:
    TimeUnit increase_backoff(TimeUnit backoff);

    TimeUnit initial_backoff_;
    TimeUnit backoff_step_;
    TimeUnit maximum_backoff_;
    BackoffPolicy policy_;
    size_t maximum_retries_;
};

} // cppkafka

#endif // CPPKAFKA_BACKOFF_PERFORMER_H

.cpp:

#include <algorithm>
#include <limits>
#include "utils\backoff_performer.h"

using std::min;
using std::numeric_limits;

namespace cppkafka {

const BackoffPerformer::TimeUnit BackoffPerformer::DEFAULT_INITIAL_BACKOFF{100};
const BackoffPerformer::TimeUnit BackoffPerformer::DEFAULT_BACKOFF_STEP{50};
const BackoffPerformer::TimeUnit BackoffPerformer::DEFAULT_MAXIMUM_BACKOFF{1000};
const size_t BackoffPerformer::DEFAULT_MAXIMUM_RETRIES{numeric_limits<size_t>::max()};

BackoffPerformer::BackoffPerformer()
: initial_backoff_(DEFAULT_INITIAL_BACKOFF),
  backoff_step_(DEFAULT_BACKOFF_STEP), maximum_backoff_(DEFAULT_MAXIMUM_BACKOFF),
  policy_(BackoffPolicy::LINEAR), maximum_retries_(DEFAULT_MAXIMUM_RETRIES) {

}

void BackoffPerformer::set_backoff_policy(BackoffPolicy policy) {
    policy_ = policy;
}

void BackoffPerformer::set_initial_backoff(TimeUnit value) {
    initial_backoff_ = value;
}

void BackoffPerformer::set_backoff_step(TimeUnit value) {
    backoff_step_ = value;
}

void BackoffPerformer::set_maximum_backoff(TimeUnit value) {
    maximum_backoff_ = value;
}

void BackoffPerformer::set_maximum_retries(size_t value) {
    maximum_retries_ = value == 0 ? 1 : value;
}

BackoffPerformer::TimeUnit BackoffPerformer::increase_backoff(TimeUnit backoff) {
    if (policy_ == BackoffPolicy::LINEAR) {
        backoff = backoff + backoff_step_;
    }
    else {
        backoff = backoff * 2;
    }
    return min(backoff, maximum_backoff_);
}

} // cppkafka

я новичок в языке, пожалуйста, дайте мне руководство.

Вы определили макрос BUILDING_MYDLL в настройках проекта при компиляции такого кода?

Algirdas Preidžius 24.08.2018 16:03

Wuold также необходимо раскомментировать раздел, в котором используется этот макрос.

john 24.08.2018 16:03

спасибо за ответ. Я раскомментировал строки, но я не знаю, как добавить макрос в препроцессоры проекта: мне просто добавить строку BUILDING_MYDLL в конфигурацию препроцессора? @ AlgirdasPreidžius

Nukhba Arshad 24.08.2018 16:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
1 004
0

Другие вопросы по теме