저는 api 라이브러리를 만들고 unittest 프로젝트에 공유로 사용하고 있습니다. API는 어떤 통화를부스트 1.57 파일 시스템/시스템 링커 오류 (gcc 4.9.2 포함)
#include <boost/filesystem.hpp>
void LoadResources(const std::string& dataPath)
{
boost::filesystem::path path(dataPath);
boost::filesystem::path file("test.txt");
boost::filesystem::path canonical = boost::filesystem::canonical(dataPath/file);
if (boost::filesystem::exists(canonical)) {
...
}
}
그런 다음 단위 테스트는 단지 그 함수를 호출하는 다음과 같은 방법을하고있다하지만 난 때문에 링커 오류
/home/ubuntu/tonkatsu/lib/libdominion.so: undefined reference to `boost::filesystem::detail::canonical(boost::filesystem::path const&, boost::filesystem::path const&, boost::system::error_code*)'
/home/ubuntu/tonkatsu/lib/libdominion.so: undefined reference to `boost::filesystem::detail::current_path(boost::system::error_code*)'
/home/ubuntu/tonkatsu/lib/libdominion.so: undefined reference to `boost::system::system_category()'
/home/ubuntu/tonkatsu/lib/libdominion.so: undefined reference to `boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*)'
/home/ubuntu/tonkatsu/lib/libdominion.so: undefined reference to `boost::system::generic_category()'
/home/ubuntu/tonkatsu/lib/libdominion.so: undefined reference to `boost::filesystem::path::operator/=(boost::filesystem::path const&)'
collect2: error: ld returned 1 exit status
의 그것을 만들 수 없습니다하지만 내 CMakeList.txt가 제대로 설정되어
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++14")
find_package(Boost COMPONENTS system filesystem log thread unit_test_framework REQUIRED)
...
target_link_libraries(unittest ${Boost_LIBRARIES} dominion)
과 함께 할 VERBOSE = 1도
/usr/bin/c++ -Wall -std=c++14 CMakeFiles/unittest.dir/home/ubuntu/tonkatsu/src/unittest/main.cpp.o CMakeFiles/unittest.dir/home/ubuntu/tonkatsu/src/unittest/dominion/api.cpp.o CMakeFiles/unittest.dir/home/ubuntu/tonkatsu/src/unittest/dominion/attributes.cpp.o CMakeFiles/unittest.dir/home/ubuntu/tonkatsu/src/unittest/dominion/dice.cpp.o CMakeFiles/unittest.dir/home/ubuntu/tonkatsu/src/unittest/lib/minicsv.cpp.o -o /home/ubuntu/tonkatsu/bin/unittest -rdynamic /usr/local/lib/libboost_system.so /usr/local/lib/libboost_filesystem.so /usr/local/lib/libboost_log.so /usr/local/lib/libboost_thread.so /usr/local/lib/libboost_unit_test_framework.so -lpthread /home/ubuntu/tonkatsu/lib/libdominion.so -Wl,-rpath,/usr/local/lib:/home/ubuntu/tonkatsu/lib
정확
부스트 :: 파일 시스템을 사용하기 전에 문제가 없었습니다. 이것은 VS2013에서 잘 작동하지만 GCC 4.9.2를 사용하는 리눅스에서는 이유를 알 수 없습니다. 나는 어쩌면 부스트 버전이 잘못되었다고 생각했다. (우분투는 1.55 만 제공하고 윈도우는 1.57을 사용했다.) 그래서 나는 1.57을 리눅스에도 만들었지 만 오류는 여전히 존재했다. 또한 boost bug은 C++ 11과 관련되어 있지만 1.57로 수정되었습니다.
나는이 주제에 대해 비슷한 질문을했지만 사람들은 주로 boost_system에 연결하는 것을 잊었지만 나는 그렇지 않다는 것을 알았습니다.
링크 라인에서 부스트 전에'dominion'을 표시하려고 했습니까? LDFLAGS에'-Wl, - no-as-needed'를 추가 할 수도 있습니다. –
@MarcGlisse, 정말 고마워요. 부스트 전에 지배력을 행사하는 것이 트릭을 만들었습니다. 나는 그 명령이 중요하다는 것을 몰랐다. 나는 대답으로 코멘트를 표시 할 수 있었으면 좋겠다. – kittikun
[boost :: filesystem :: detail :: copy \ _file]에 대한 C++ BOOST 정의되지 않은 참조의 가능한 복제본 (http://stackoverflow.com/questions/35007134/c) -boost-undefined - 참조 파일 - 참조 파일 시스템 참조 파일 복사 - 파일) –