繁体   English   中英

Boost.Program_options在Clang下没有正确链接

[英]Boost.Program_options not linking correctly under Clang

Boost.Program_options文档中的以下初始示例

// Copyright Vladimir Prus 2002-2004.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt
// or copy at http://www.boost.org/LICENSE_1_0.txt)

/* The simplest usage of the library.
 */

#include <boost/program_options.hpp>
namespace po = boost::program_options;

#include <iostream>
#include <iterator>
using namespace std;

int main(int ac, char* av[])
{
    try {

        po::options_description desc("Allowed options");
        desc.add_options()
            ("help", "produce help message")
            ("compression", po::value<double>(), "set compression level")
        ;

        po::variables_map vm;        
        po::store(po::parse_command_line(ac, av, desc), vm);
        po::notify(vm);    

        if (vm.count("help")) {
            cout << desc << "\n";
            return 0;
        }

        if (vm.count("compression")) {
            cout << "Compression level was set to " 
                 << vm["compression"].as<double>() << ".\n";
        } else {
            cout << "Compression level was not set.\n";
        }
    }
    catch(exception& e) {
        cerr << "error: " << e.what() << "\n";
        return 1;
    }
    catch(...) {
        cerr << "Exception of unknown type!\n";
    }

    return 0;
}

在g ++( 实例 )下正确编译,链接和运行,但不是在clang( 实例 )下有错误

/tmp/main-47ef95.o:在函数boost::program_options::typed_value<double, char>::name() const': main.cpp:(.text._ZNK5boost15program_options11typed_valueIdcE4nameEv[_ZNK5boost15program_options11typed_valueIdcE4nameEv]+0x49): undefined reference to boost :: program_options :: arg'/ tmp / main-47ef95.o:在函数boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)': main.cpp:(.text._ZN5boost15program_options16validation_errorC2ENS1_6kind_tERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_i[_ZN5boost15program_options16validation_errorC2ENS1_6kind_tERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_i]+0x39): undefined reference to提高:: program_options :: VALIDATION_ERROR :: get_template(升压:: program_options :: VALIDATION_ERROR :: kind_t)”铛:ER ror:链接器命令失败,退出代码为1(使用-v查看调用)

问题 :给出了什么?

GCC C ++ ABI在版本5发生了变化,这可能导致某些对象不兼容:

用户只需要确保他们使用他们所依赖的库所使用的ABI进行构建。

我认为您的boost版本可能是使用GCC 5构建的(CoLiRu已安装5.2),并且生成的库与clang ++对象不兼容。

这篇博客文章讨论了GCC5和Clang的兼容性,并链接到一个开放的LLVM错误,以恢复与GCC的ABI互操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM