0

Код

#ifndef TASKLIST_HPP
#define TASKLIST_HPP
#include <iostream>
#include <string>
#include <fstream>
#include <chrono>
#include <thread>
#include <mutex>
#include <vector>
#include <unordered_map>
#include <unistd.h>

#include "../Helpers/Variables.hpp"
#include "../Helpers/Enums.hpp"
#include "../Helpers/FileMethods.hpp"
#include "../Helpers/DebuggerHelper.hpp"

namespace TaskList {

void StartAlgos(/*bool* isRun, std::vector<std::pair<BYTE, std::vector<BYTE>*>>* list, TaskList* tl*/);

class TaskList{
private:

    bool isRun = false;

    std::vector<std::pair<BYTE, std::vector<BYTE>*>> list;
    std::unordered_map<Enums::settings, std::string>* settings;

public:

    TaskList(std::unordered_map<Enums::settings, std::string>* settingsmap){
        settings = settingsmap;
    }

    void Push(std::vector<BYTE>* block){
        lu threads = std::stoul((*settings)[Enums::settings::threadlimit]);
        while (list.size() >= threads) WaitQueue(); // You shouldn't use more than (cores+1) than you have

        listMutex.lock();
        list.push_back(std::make_pair(0, block));
        listMutex.unlock();

        std::thread ff(StartAlgos);
    }

    void WaitQueue(){
        std::this_thread::sleep_for(std::chrono::milliseconds(250));
    }

    ~TaskList() {}

    std::vector<std::thread> threadList;
    std::mutex listMutex;

};

void StartAlgos(/*bool* isRun, std::vector<std::pair<BYTE, std::vector<BYTE>*>>* list, TaskList* tl*/){


}    

}

#endif // TASKLIST_HPP

Ошибки при компиляции: введите сюда описание изображения

Никак не могу понять - что я сделал не так.
Можете подсказать - в чем ошибка?

1 Answers1

2

Линковщик не может найти библиотеку pthread (она работает под капотом std::thread если вы собираете под linux). Вам нужно в вашей системе сборки подключить эту библиотеку.

Если ваша система сборки cmake то добавьте в основной скрипт сборки строку find_package (Threads), и в вызов target_link_libraries добавьте переменную ${CMAKE_THREAD_LIBS_INIT}.

Rivand
  • 2,084
  • я использую g++, если можно - для него тоже инструкцию напишите – Alrott SlimRG Sep 25 '20 at 03:42
  • 1
    @AlrottSlimRG g++ это компилятор, он только компилирует отдельные cpp файлы. После компиляции остаются объектнники (файлы с расширением ‘o’) которые надо слинковать. У вас проблема на этапе линковки. Вам надо выяснить какую систему сборки вы используете и настроить её на линковку pthread. – Rivand Sep 25 '20 at 03:46