簡體   English   中英

Boost Xcode C ++命令行體系結構x86_64的未定義符號

[英]Boost Xcode C++ command line Undefined symbols for architecture x86_64

按照此處的說明,我已經成功地在測試應用程序中獲得了提升。 我現在需要創建一個命令行應用程序來生成許可證。 我繼承了這段代碼,它使用了boost。 我想我已經正確設置了所有內容但是當我嘗試構建時,我收到了針對架構x86_64錯誤的未定義符號,因為所有內容都使用了boost。

我創建了一個命令行應用程序:

在此輸入圖像描述

我添加了boost的路徑:

在此輸入圖像描述

我甚至試圖改變C ++標准庫編譯器:

在此輸入圖像描述

這是我引用boost庫的一些代碼:

#include <boost/date_time/posix_time/posix_time_io.hpp>

namespace bg = boost::gregorian;
namespace bp = boost::posix_time;

以下是錯誤:

Undefined symbols for architecture x86_64:
  "boost::program_options::to_internal(std::string const&)", referenced from:
      std::vector<std::string, std::allocator<std::string> > boost::program_options::to_internal<std::string>(std::vector<std::string, std::allocator<std::string> > const&) in main.o
  "boost::program_options::variables_map::variables_map()", referenced from:
      _main in main.o
  "boost::program_options::options_description::add_options()", referenced from:
      _main in main.o
  "boost::program_options::options_description::m_default_line_length", referenced from:
      _main in main.o
  "boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)", referenced from:
      _main in main.o
  "boost::program_options::options_description_easy_init::operator()(char const*, boost::program_options::value_semantic const*, char const*)", referenced from:
      _main in main.o
  "boost::program_options::options_description_easy_init::operator()(char const*, char const*)", referenced from:
      _main in main.o
  "boost::program_options::arg", referenced from:
      boost::program_options::typed_value<std::string, char>::name() const in main.o
  "boost::program_options::store(boost::program_options::basic_parsed_options<char> const&, boost::program_options::variables_map&, bool)", referenced from:
      _main in main.o
  "boost::program_options::detail::cmdline::set_additional_parser(boost::function1<std::pair<std::string, std::string>, std::string const&>)", referenced from:
      boost::program_options::basic_command_line_parser<char>::extra_parser(boost::function1<std::pair<std::string, std::string>, std::string const&>) in main.o
  "boost::program_options::detail::cmdline::set_options_description(boost::program_options::options_description const&)", referenced from:
      boost::program_options::basic_command_line_parser<char>::options(boost::program_options::options_description const&) in main.o
  "boost::program_options::detail::cmdline::get_canonical_option_prefix()", referenced from:
      boost::program_options::basic_command_line_parser<char>::run() in main.o
  "boost::program_options::detail::cmdline::run()", referenced from:
      boost::program_options::basic_command_line_parser<char>::run() in main.o
  "boost::program_options::detail::cmdline::style(int)", referenced from:
      boost::program_options::basic_command_line_parser<char>::style(int) in main.o
  "boost::program_options::detail::cmdline::cmdline(std::vector<std::string, std::allocator<std::string> > const&)", referenced from:
      boost::program_options::basic_command_line_parser<char>::basic_command_line_parser(int, char const* const*) in main.o
  "boost::program_options::notify(boost::program_options::variables_map&)", referenced from:
      _main in main.o
  "boost::program_options::validate(boost::any&, std::vector<std::string, std::allocator<std::string> > const&, std::string*, int)", referenced from:
      boost::program_options::typed_value<std::string, char>::xparse(boost::any&, std::vector<std::string, std::allocator<std::string> > const&) const in main.o
  "boost::program_options::operator<<(std::ostream&, boost::program_options::options_description const&)", referenced from:
      _main in main.o
  "boost::program_options::error_with_option_name::get_canonical_option_name() const", referenced from:
      boost::program_options::error_with_option_name::get_option_name() const in main.o
  "boost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&, std::vector<std::string, std::allocator<std::string> > const&, bool) const", referenced from:
      vtable for boost::program_options::typed_value<std::string, char> in main.o
  "typeinfo for boost::program_options::error_with_option_name", referenced from:
      typeinfo for boost::program_options::required_option in main.o
  "typeinfo for boost::program_options::value_semantic_codecvt_helper<char>", referenced from:
      typeinfo for boost::program_options::typed_value<std::string, char> in main.o
  "vtable for boost::program_options::variables_map", referenced from:
      boost::program_options::variables_map::~variables_map() in main.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for boost::program_options::value_semantic_codecvt_helper<char>", referenced from:
      boost::program_options::value_semantic_codecvt_helper<char>::value_semantic_codecvt_helper() in main.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

有沒有人使用boost成功構建命令行應用程序? 如果是,那么請你幫忙嗎?

謝謝。

問題可能是由兩個不同的問題造成的:

  1. 您沒有在屬性上鏈接庫:

在“構建階段”選項卡的“使用庫中鏈接二進制”中添加:libboost_program_options.a

  1. 另一個問題是在安裝庫時如何編譯和鏈接boost庫。

如果你想使用libstdc ++,你應該像這樣構建boost:

./bootstrap.sh
./b2 cxxflags="-stdlib=libstdc++" linkflags="-stdlib=libstdc++"
./b2 install --prefix=YOURINSTALLATIONDIRECTORY

然后在xcode中使用libstdc ++。

暫無
暫無

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

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