【问题标题】:Boost:;program_options 1.49 - can't link with -lboost_program_optionsBoost:;program_options 1.49 - 无法与 -lboost_program_options 链接
【发布时间】:2015-06-16 07:44:35
【问题描述】:

我正在尝试第一次使用 Boost 任何东西,所以我想我会从 program_options 开始。我正在运行 Debian Wheezy 的 Raspberry Pi 上进行开发。我从“apt-get install libboost1.49-all”开始,一切似乎都安装正确了。我可以在 /usr/lib 中看到 .a 和 .so 库。

/usr/lib/libboost_program_options.a
/usr/lib/libboost_program_options-mt.a -> libboost_program_options.a
/usr/lib/libboost_program_options-mt.so -> libboost_program_options.so.1.49.0
/usr/lib/libboost_program_options.so -> libboost_program_options.so.1.49.0
/usr/lib/libboost_program_options.so.1.49.0

我可以编译一些我找到的示例源代码 here 使用

g++ boost_program_options.cpp -c

但我无法获得任何链接。我尝试使用 no -l 明确指定库路径,但除了几页未定义的引用错误外什么也没有。我尝试了另一个示例代码并遇到了一个编译问题,这表明我没有使用“g++ -std=c++0x”,但这也不是问题所在。我被困住了。我也试过了

 g++ -std=c++0x boostme.cpp -o boostme -L/usr/lib -lboost_program_options

此时我只是用头撞墙。在我到目前为止看到的 stackoverflow 帖子中,我做的一切都是正确的。我头疼。 ;-)

以下只是一些示例错误消息。还在闲逛。

/tmp/ccTbmurt.o: In function `boost::program_options::error_with_option_name::~error_with_option_name()':
boostme.cpp:(.text._ZN5boost15program_options22error_with_option_nameD2Ev[_ZN5boost15program_options22error_with_option_nameD5Ev]+0x118): undefined reference to `vtable for boost::program_options::error_with_option_name'
/tmp/ccTbmurt.o: In function `boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)':
boostme.cpp:(.text._ZN5boost15program_options16validation_errorC2ENS1_6kind_tERKSsS4_i[_ZN5boost15program_options16validation_errorC5ENS1_6kind_tERKSsS4_i]+0x30): undefined reference to `boost::program_options::validation_error::get_template(boost::program_options::validation_error::kind_t)'

【问题讨论】:

    标签: c++ boost debian raspbian boost-program-options


    【解决方案1】:

    因为那个析构函数的签名真的应该

        ~error_with_option_name() throw() {}
    

    我要看看我的水晶球,然后说 - 也许 - 你的代码库中可能隐藏了 #define throw() 或类似的东西。

    那,或者你可能在你的包含路径中有冲突的头文件版本,这与链接时找到的库的版本不对应

    【讨论】:

    • 我认为这是问题所在。我认为 1.49 是我无需自己构建的操作系统所能拥有的最棒的 Boost 版本,但我发现 1.50 可用并且我安装了它。这似乎成功了。我曾经尝试在 Pi 上构建 1.57 版本,但它总是会找到我不记得的这个文件,编译器会永远坐在它上面,并且严重地固定 CPU,以至于让机器敲击键盘几乎是不可能的。我会在 /usr/include 中查看是否有任何不应该存在的 1.57 包含。
    • 呵呵呵呵。那将是使用 Boost Spirit 进行解析的 BGL 实现文件之一。无论如何,你可以交叉编译它,但我承认我从未尝试过
    猜你喜欢
    • 2017-04-27
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多