Я создал файл .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 */
}