簡體   English   中英

C++ BOOST 未定義引用`boost::filesystem::detail::copy_file

[英]C++ BOOST undefined reference to `boost::filesystem::detail::copy_file

我不知道為什么boost::filesystem::copy_file我帶來麻煩。

對`boost::filesystem::detail::copy_file 的未定義引用

// g++ -std=c++11 test.cpp -lboost_filesystem -lboost_system -lrt -lboost_wave

#include <boost/filesystem.hpp>

int main()
{

    boost::filesystem::create_directory("aaa");
    // ok


    boost::filesystem::copy_file("f1","f2");
    // /tmp/ccNWZltB.o: In function `boost::filesystem::copy_file(boost::filesystem::path const&, boost::filesystem::path const&)':
    // test.cpp:(.text._ZN5boost10filesystem9copy_fileERKNS0_4pathES3_[_ZN5boost10filesystem9copy_fileERKNS0_4pathES3_]+0x26): undefined reference to `boost::filesystem::detail::copy_file(boost::filesystem::path const&, boost::filesystem::path const&, boost::filesystem::copy_option, boost::system::error_code*)'
    // collect2: error: ld returned 1 exit status


    return 0;
}

我沒有從 boost 的源代碼或其幫助中得到靈感:

  inline
  void copy_file(const path& from, const path& to,   // See ticket #2925
                 BOOST_SCOPED_ENUM(copy_option) option, system::error_code& ec)
                                       {detail::copy_file(from, to, option, &ec);}

即使是這樣一個簡單的例子也不適合我。

平台: Linux Ubuntu 64

此問題有解決方法,更換

#include <boost/filesystem.hpp>

#define BOOST_NO_CXX11_SCOPED_ENUMS
#include <boost/filesystem.hpp>
#undef BOOST_NO_CXX11_SCOPED_ENUMS

或者,最好將-DBOOST_NO_CXX11_SCOPED_ENUMS添加到您的編譯器標志中

如果遇到此問題,請確保在對 g++ 的調用中同時包含-lboost_system-lboost_filesystem

示例工作 Makefile

BINARY = output
FILE_OBJECTS = main.o fileLoader.o
BOOST = -lboost_system -lboost_filesystem
GCC = g++ -std=c++17
FLAGS = -Wall -pedantic -Wextra

build: $(FILE_OBJECTS)
    $(GCC) $(FLAGS) $(FILE_OBJECTS) -o $(BINARY) $(BOOST)

main.o: main.cpp fileLoader.o
    $(GCC) $(FLAGS) -c main.cpp

fileLoader.o: fileLoader.cpp
    $(GCC) $(FLAGS) -c fileLoader.cpp

clean:
    rm -rf *.o $(BINARY)

示例工作代碼

#include <boost/filesystem.hpp>

void create_data_file(std::string file_path)
{
    boost::filesystem::path p(file_path);
    boost::filesystem::create_directory(p);
}

我也無法編譯包含頭文件boost/filesystem.hpp的文件。 這就是我解決它的方法:我注釋掉了boost/filesystem.hpp行和所有使用 Boost 的行,然后編譯了該文件。 然后我取消注釋文件中的所有行並再次編譯,然后它就起作用了。 我兩次都使用標志-lboost_system進行編譯!

在舊的 bo​​ost 版本中,它是BOOST_NO_SCOPED_ENUMS ,而不是BOOST_NO_CXX11_SCOPED_ENUMS

請參閱c++11 中的 boost::filesystem::copy_file() 缺少符號

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM