C++ 프로그램을 컴파일할 수 없습니다. 분명히 Boost.Move 라이브러리가 종속성으로 추가되지 않았기 때문입니다. unique_ptr과 관련된 컴파일 오류. 프로그램에는 boost.move를 제외하고 성공적으로 추가한 종속성으로 여러 부스트 라이브러리가 있습니다. 많은 예제와 code를 살펴보았지만 CMakelists.txt에 추가하는 방법에 대한 구체적인 예제는 제출하지 않았습니다.
내 .cpp 프로그램의 삽입(모든 종속성이 없는 문제를 일으키는 것으로 나타남):
#include <boost/move/unique_ptr.hpp>...
boost::movelib::unique_ptr<plctag> _plctag;
...
CMakeLists.txt의 내 부스트 종속성:
find_package(Boost REQUIRED COMPONENTS log thread)
컴파일 오류, 정말 제 생각인가요?:
path///.cpp:100:46: error: wrong number of template arguments (1, should be 2)
100 | boost::movelib::unique_ptr<plctag> _plctag;
| ^
In file included from /usr/include/boost/smart_ptr/shared_ptr.hpp:28,
from /usr/include/boost/shared_ptr.hpp:17,
from /usr/include/boost/date_time/time_clock.hpp:17,
from /usr/include/boost/thread/thread_time.hpp:9,
from /usr/include/boost/thread/lock_types.hpp:18,
from /usr/include/boost/thread/pthread/mutex.hpp:16,
from /usr/include/boost/thread/mutex.hpp:16,
path///.hpp:4,
path///.cpp:8:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:58:36: note: provided for ‘template<class T, class D> class boost::movelib::unique_ptr’
58 | template< class T, class D > class unique_ptr;
| ^~~~~~~~~~
path///.cpp:102:21: error: request for member ‘reset’ in ‘_tag’, which is of non-class type ‘int’
102 | _tag.reset();
| ^~~~~
path///.cpp:108:20: error: base operand of ‘->’ is not a pointer
108 | _tag->write_tag_str();
| ^~
path///.cpp:111:27: error: base operand of ‘->’ is not a pointer
111 | string_vec= _tag->read_tag_str();
| ^~
path///.cpp:125:20: error: base operand of ‘->’ is not a pointer
125 | _tag->write_tag();
| ^~
path///.cpp:128:27: error: base operand of ‘->’ is not a pointer
128 | float_vec= _tag->read_tag();
제가 이해하지 못하는 부분이 있을 수 있습니다. 이 시점에서 거의 초보자입니다. 도와 주셔서 감사합니다
boost/move/unique_ptr.hpp 헤더가 하는 방식으로 기본 템플릿 매개변수를 지정하지 않는 boost::movelib::unique_ptr의 전방 선언이 있는 것 같습니다. 아마도 #include
@AlanBirtles: 기꺼이 하겠지만 전체 프로그램에는 종속성이 너무 많기 때문에 게시물을 복잡하게 만들고 싶지 않습니다. 내 가설에 대한 의견을 듣고 싶었고, 맞다면 해결책을 찾고 싶었습니다. cmake에서 부스트 이동에 대한 종속성을 추가하지 않았습니다. 필요하지 않다고 생각하십니까? 정말 감사합니다
nigeno2021-12-31 07:03:14@fabian: 귀하의 의견에 감사드립니다. code가 작동해야 합니다. 검증된 github 라이브러리에서 거의 복사했습니다. 제가 잘못 건설했나봐요. 컴파일을 위해 부스트 이동 종속성을 추가할 필요가 없다고 생각하십니까? 스레드와 로그만 추가했습니다.
nigeno2021-12-31 07:03:14부스트 구성 요소는 target_link_libraries를 사용하여 적절한 구성 요소를 연결할 때 필요한 종속성을 자동으로 추가해야 합니다. 여기에는 lib의 공개 헤더에 사용되는 헤더를 사용하는 데 필요한 포함 디렉토리 추가가 포함되어야 하므로 target_link_libraries(yourTarget PRIVATE Boost::thread)는 필요한 헤더를 제공해야 컴파일을 통해 얻을 수 있고 필요한 헤더처럼 보입니다. 있습니다("include xy.hpp not found" 또는 이와 유사한 오류 없음). 지금 내 유일한 추측은 포함에 예상치 못한 일이 일어나고 있다는 것입니다...
fabian2021-12-31 07:03:14
최소한의 재현 가능한 예를 제공하십시오. 문제가 code에 있고 cmake와 아무 관련이 없다고 생각합니다.
Alan Birtles2021-12-31 07:03:14