当前位置: 首页 > 知识库问答 >
问题:

在Mac OS X上用G++4.8编译Boost::Program_Options(Mac端口)

羊舌胡非
2023-03-14

我正在尝试使用GCC4.8(通过MacPorts安装)编译boost::program_options示例之一,http://svn.boost.org/svn/boost/trunk/libs/program_options/example/first.cpp。然而,我不断得到错误:

Undefined symbols for architecture x86_64:
  "boost::program_options::to_internal(std::basic_string, std::allocator > const&)", referenced from:
      std::vector, std::allocator >, std::allocator, std::allocator > > > boost::program_options::to_internal, std::allocator > >(std::vector, std::allocator >, std::allocator, std::allocator > > > const&) in ccEWnIGV.o
  "boost::program_options::options_description::options_description(std::basic_string, std::allocator > const&, unsigned int, unsigned int)", referenced from:
      _main in ccEWnIGV.o
  "boost::program_options::invalid_option_value::invalid_option_value(std::basic_string, std::allocator > const&)", referenced from:
      void boost::program_options::validate(boost::any&, std::vector, std::allocator >, std::allocator, std::allocator > > > const&, double*, long) in ccEWnIGV.o
  "boost::program_options::error_with_option_name::error_with_option_name(std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, int)", referenced from:
      boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t, std::basic_string, std::allocator > const&, std::basic_string, std::allocator > const&, int) in ccEWnIGV.o
  "boost::program_options::detail::cmdline::set_additional_parser(boost::function1, std::allocator >, std::basic_string, std::allocator > >, std::basic_string, std::allocator > const&>)", referenced from:
      boost::program_options::basic_command_line_parser::extra_parser(boost::function1, std::allocator >, std::basic_string, std::allocator > >, std::basic_string, std::allocator > const&>) in ccEWnIGV.o
  "boost::program_options::detail::cmdline::cmdline(std::vector, std::allocator >, std::allocator, std::allocator > > > const&)", referenced from:
      boost::program_options::basic_command_line_parser::basic_command_line_parser(int, char const* const*) in ccEWnIGV.o
  "boost::program_options::operator >&, boost::program_options::options_description const&)", referenced from:
      _main in ccEWnIGV.o
  "boost::program_options::abstract_variables_map::operator[](std::basic_string, std::allocator > const&) const", referenced from:
      boost::program_options::variables_map::operator[](std::basic_string, std::allocator > const&) const in ccEWnIGV.o
  "boost::program_options::error_with_option_name::substitute_placeholders(std::basic_string, std::allocator > const&) const", referenced from:
      vtable for boost::program_options::invalid_option_value in ccEWnIGV.o
      vtable for boost::program_options::validation_error in ccEWnIGV.o
etc...

boost库通过MacPorts安装,将头文件放在/opt/local/include中,将库文件放在/opt/local/lib中。使用的compile命令是:

$G++-i/opt/local/include first.cpp-l/opt/local/lib-lboost_program_options-mt

使用G++4.8(即阶乘、hermite等)编译仅标头的boost函数可以很好地工作。

我觉得奇怪的是,如果我使用LLVM-G++编译器,这个示例会进行编译:

$LLVM-g++-i/opt/local/include first.cpp-l/opt/local/lib-lboost_program_options-mt

 $ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/opt/local/libexec/gcc/x86_64-apple-darwin12/4.8.1/lto-wrapper
Target: x86_64-apple-darwin12
Thread model: posix
gcc version 4.8.1 (MacPorts gcc48 4.8.1_3)
 $ llvm-g++ -v
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix

为什么这个例子没有用GCC4.8编译?有什么想法吗?有办法解决吗?

Update:该示例还使用clang++进行编译

共有1个答案

司寇飞航
2023-03-14

正如Shigerello已经提到的,问题在于用clang编译的boost和用gcc编译的boost不兼容。

用GCC-4.8编译boost的一个更简单的变体是只使用boost的gcc48变体:

sudo port install boost +gcc48
 类似资料:
  • 我在Ubuntu 18.04上,g -8编译器找不到libboost-asio模块。然而,我用 每当我试图用下面的头文件进行编译时 我被抛出一个编译器错误,说头文件无法找到。 我能够使用其他boost头进行编译,例如boost/array。hpp,但与asio无关。 在libbooost上运行版本检查 returns:版本:1.65.1.0ubuntu1 我也找不到任何asio使用倾向的痕迹。我怀

  • 我在尝试编译使用boost库的项目时遇到问题。 我得到的错误是: 还有更多关于未来的编译错误。水电站。。。。。 我试图重新安装Windows SDK和Visual Studio,但这两种情况都没有帮助。 我想它可能是关于错误的包含路径,所以我检查项目属性中的宏。我发现在'包含目录'中我有$(VC_IncludePath);$(WindowsSDK_IncludePath); 评估为: C:\Pro

  • 我试图得到最基本的梯度项目(与测试)建立。我看了所有相关的问题和谷歌搜索,我似乎错过了一些非常基本的,显然不常见的东西。 我创建了一个测试类,“Gradle CompiletestJava”无法编译该文件 就这样。光秃秃的骨头!我还尝试添加 依赖关系{ testCompile'JUnit:JUnit:4.10' 有什么想法吗? 以下是我得到的:

  • 我试图学习如何在终端中编译在IDE Eclipse上制作的Java程序。在打开终端后立即开始,我应该采取什么步骤在终端中编译我在Eclipse上制作的程序?谢谢你的帮助。 更新:我导航到了我的java文件夹,找到了存放我的程序的包,并完成了javac Hello一行。java(Hello是我试图编译的基本“Hello World”程序),但当我执行java Hello时,会出现一个很大的错误: 线

  • 我正在做一个需要在mac上运行CGAL的项目,一般来说对C来说是非常新的。我使用命令使用macport安装了CGAL 我把教程复制到了一个。cpp文件,并使用 这将返回错误 ld:library not found for-lcgal clang:error:linker命令失败,退出代码为1(使用-v查看调用) 苹果LLVM 5.1版(clang-503.0.40)(基于LLVM 3.4svn)

  • 问题内容: 我有史以来最简单的代码: 尽管我仍然无法编译运行它。 更多细节: 编译命令: 运行: 现在我陷入困境。在Internet上的每个相关线程中,建议在已经拥有的情况下添加它。 我究竟做错了什么? PS:这是全新的ubuntu 13.10安装。只有包安装和次要之类的东西等 PPS: PPPS:使用(v3.2)可以编译并正常运行 PPPPS:伙计们,这不是Linux下在GCC中使用std ::