相关疑难解决方法(0)

由nuget驱动的vc ++ vs2013代码不构建

我是VC++和Boost的新手.我的问题是我想在我的VC++ Visual Studio 2013项目中使用Boost 1.56.0(所以我使用vc120).

我已经通过NuGet安装了Boost(https://www.nuget.org/packages/boost/).一切似乎都没问题,但当我尝试构建我的项目时,它说:

致命错误LNK1104:无法打开文件"libboost_thread-vc120-mt-gd-1_56.lib".

你知道问题究竟在哪里以及我如何解决它?

我认为使用NuGet安装一个软件包将完成所有工作以使其自行运行.我知道链接器找不到lib文件(实际上根本没有构建过程).但我不知道如何解决这个问题.

我认为用VC120手动编译Boost并将lib文件夹添加到链接器的其他路径并不是一个好主意.那我为什么要使用NuGet呢?

欢迎任何帮助 - 我正在尝试和搜索互联网这么多个小时,我无法解决问题.

谢谢Stefan

c++ boost visual-c++ nuget visual-studio-2013

10
推荐指数
2
解决办法
3599
查看次数

是否可以将 Boost 序列化用作仅标头库?

下面是使用很棒的Boost.Serialization库的最小示例。

要编译该库,我需要链接到boost_serialization预编译的库。

$ c++ -std=c++11 example.cpp -o example.x -lboost_serialization
                                          ^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

该库经过大量模板化,尽管内部很复杂,但实际代码(函数体)非常简单。只有少数参考文献需要链接,即:

boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::text_oarchive_impl(std::ostream&, unsigned int)
boost::archive::text_iarchive_impl<boost::archive::text_iarchive>::text_iarchive_impl(std::istream&, unsigned int)
boost::archive::text_iarchive_impl<boost::archive::text_oarchive>::~text_oarchive_impl()
boost::archive::text_iarchive_impl<boost::archive::text_iarchive>::~text_iarchive_impl()
...
boost::archive::archive_exception::~archive_exception()'
Run Code Online (Sandbox Code Playgroud)

是否有可能在不链接为仅标头库的情况下使用该库?

例如一些未记录的技巧或黑客行为?

这将使其在某些超级计算机集群和环境中使用起来更加简单,而在这些环境中,编译 Boost 并不是那么简单。

#include<sstream>
#include<numeric>
#include<boost/archive/text_oarchive.hpp> // needs linking 
#include<boost/archive/text_iarchive.hpp>
#include<boost/serialization/vector.hpp>

int main(){

    std::vector<double> v(10); std::iota(v.begin(), v.end(), 0);
    std::stringstream ss;
    {
        boost::archive::text_oarchive toa(ss);
        toa << v;
    }
    std::vector<double> v2;
    boost::archive::text_iarchive tia(ss);
    tia >> v2;
    assert(v == v2);
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果库提供仅标头的选项,就像 Boost.Asio 那样(/sf/answers/2851060761/。)


EDIT2:Boost.Serialization 的作者和维护者拒绝了仅将其设为标头的想法。https://github.com/boostorg/serialization/issues/71

c++ boost boost-serialization header-only

5
推荐指数
1
解决办法
1617
查看次数

BOOST_ERROR_CODE_HEADER_ONLY没有广告效果

在我的应用程序中,我包括boost/system/error_code.hpp(boost 1.58),但不想链接到boost_system,而是有一个只有标头的解决方案.我读到定义BOOST_ERROR_CODE_HEADER_ONLY应该是可能的.但不幸的是,它没有按预期工作.我仍然得到boost :: system :: system_category()的链接器错误.

我想知道这是否应该起作用,如果是这样的话.boost标头中的代码是:

# ifdef BOOST_ERROR_CODE_HEADER_ONLY
    inline const error_category &  system_category() BOOST_SYSTEM_NOEXCEPT;
    inline const error_category &  generic_category() BOOST_SYSTEM_NOEXCEPT;
#else
    BOOST_SYSTEM_DECL const error_category &  system_category() BOOST_SYSTEM_NOEXCEPT;
    BOOST_SYSTEM_DECL const error_category &  generic_category() BOOST_SYSTEM_NOEXCEPT;
#endif
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,没有为system_category()定义主体.如果没有链接到lib,这怎么可以工作呢?

更新:

在此期间,我发现了声明的主体定义在哪里(文件中boost/system/detail/error_code.hpp包含了boost/system/error_code.hpp它.仍然没有避免链接器错误.我正在使用XCode(llvm C++ 11)并BOOST_ERROR_CODE_HEADER_ONLY在目标中定义设置,如果重要的话.

c++ boost xcode6

4
推荐指数
1
解决办法
1490
查看次数

HTTP中的HTTP获取请求

我需要向我的网站发送HTTP GET请求,然后获取页面内容并解析它.我宁愿不使用像libCURL这样的库,因为我希望最终应用程序完全独立(这是从个人经验中引用的,我可能错了,但如果我记得客户端必须有某些动态链接库来运行带有libCURL的应用程序库.),我在Visual Studio 2012中使用C++.

代码示例也很好.

c++ get http

3
推荐指数
1
解决办法
1万
查看次数