.so файл конструктор не найден - PullRequest
0 голосов
/ 06 ноября 2019

Я создал файл .so на своем компьютере, и он работает, но когда я клонирую код и снова пытаюсь создать .so, используя команды:

cmake ..
sudo make install

он создаетобщий объект, но когда я пытаюсь построить проект, я получаю:

void __gnu_cxx :: new_allocator :: construct, std :: allocator> &> (InventoryManager *, std:: __cxx11 :: basic_string, std :: allocator> &) ': /usr/local/include/c++/7.4.0/ext/new_allocator.h:136: неопределенная ссылка на `InventoryManager :: InventoryManager (std :: __ cxx11:: basic_string, std :: allocator> cons

Как мне заставить это работать?

Это мой файл CMakeList.txt

cmake_minimum_required(VERSION 3.9)
project(InventoryManager VERSION 1.0.1 DESCRIPTION "InventoryManager v 1.0.1")
set(CMAKE_CXX_STANDARD 14)

include(GNUInstallDirs)
add_library(InventoryManager SHARED
          src/InventoryItem.cpp
          src/InventoryItemFactory.cpp
          src/InventoryManager.cpp)
SET_TARGET_PROPERTIES(InventoryManager PROPERTIES
        VERSION ${PROJECT_VERSION}
        SOVERSION 1
        PUBLIC_HEADER include/InventoryItem.hpp
                    include/InventoryItemFactory.hpp
                    include/InventoryManager.hpp)
configure_file(InventoryManager.pc.in InventoryManager.pc @ONLY)
target_include_directories(InventoryManager PRIVATE .)
install(TARGETS InventoryManager
        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
        PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(FILES ${CMAKE_BINARY_DIR}/InventoryManager.pc
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig)

РЕДАКТИРОВАТЬ это конструктор из InventoryManager.cpp

#include <cmath>
#include <functional>
#include <include/InventoryManager.hpp>
#include <iostream>

InventoryManager::InventoryManager(const std::string &symbol):m_Symbol(symbol),m_itemFactory(*(new InventoryItemFactory(symbol)))
{
    m_InventoryQty = 0;
    m_InventoryItemValue = 0;
    m_TotalInventoryValue = 0;
    m_CurrentInventoryValue = 0;

}

, а вот объявление в файле .h

#include <string>
#include <mutex>
#include <map>
#include <memory>
#include "InventoryItem.hpp"
#include "InventoryItemFactory.hpp"

class InventoryManager
{
public:
      explicit InventoryManager(const std::string &symbol);
    /* more functions */
}
...