Во-первых, я работаю над этим в течение нескольких дней, и я пробовал все возможные исправления (пошел на 10-ю страницу поиска Google, чтобы найти исправление), но я не могу получить это работать.CMake не правильно связывает файлы .obj LNK2019 __thiscall
Я переношу приложение Unix (G ++/Bison/Flex) в Windows (MSVC/WinBison/WinFlex). Я использую CMake как систему сборки, и идея состоит в том, чтобы построить проект из VS CMD и получить проект VS, готовый к модификации. Проект предназначен для работы на обеих платформах, поэтому все изменения должны быть сделаны в CMakeLists.txt
, так что мне не нужно писать специальные инструкции, сделанные в VS.
Проблематичный линия в preprocessor.cc
является
State current(task->CPFs);
а метод State(std::vector<ConditionalProbabilityFunction*> const& cpfs)
объявлен в states.h
с помощью следующего кода:
struct State { State(std::vector<ConditionalProbabilityFunction*> const& cpfs); State(State const& other) : state(other.state) {} State(int stateSize) : state(stateSize, 0.0) {}
и внедрены в states.cc
:
State::State(vector<ConditionalProbabilityFunction*> const& cpfs) { for (unsigned int i = 0; i < cpfs.size(); ++i) { state.push_back(cpfs[i]->getInitialValue()); } }
states.h
входит в states.cc
и rddl.h
(который включен в preprocessor.cc
) и class States
поступательно, объявленного в preprocessor.h
(который включен в preprocessor.cc
).
Ошибки я получаю являются
[ 36%] Linking CXX executable rddl-parser.exe preprocessor.cc.obj : error LNK2019: unresolved external symbol "public: __thiscall State::State(class std::vector<struct ConditionalProbabilityFunction *,class std::allocator<struct ConditionalProbabilityFunction *> > const &)" ([email protected]@[email protected][email protected]@@[email protected]@@@[email protected]@@[email protected]@@Z) referenced in function "private: void __thiscall Preprocessor::prepareActions(void)" ([email protected]@@AAEXXZ) rddl.cc.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall LogicalExpression::evaluate(double &,struct State const &,class ActionState const &)const " ([email protected]@@[email protected]@[email protected]@@Z)
Linking, когда сборка на Unix, работает отлично. Но когда я запускаю его в Windows, я получаю эту ошибку.
Это часть CMake кода, который делает связывание:
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG") set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG") add_executable(rddl-parser ${RDDL_PARSER_SOURCES} ${FLEX_scanner_OUTPUTS} ${BISON_parser_OUTPUTS}) target_link_libraries(rddl-parser ${FLEX_LIBRARIES} ${BISON_LIBRARIES})
Возможность скопировать определение функции в исходный файл является не идти.
отправьте сообщение [mcve] –
@ m.s. Я попытался включить больше контекста. Проект действительно большой, и это лучшее, что я мог сделать, сохраняя его коротким и простым. –
где находится 'State (std :: vector const & cpfs)' реализовано? вы должны действительно попытаться разбить свой проект, удалив как можно больше, чтобы устранить проблему. –