【问题标题】:boost LNK2019 error提升 LNK2019 错误
【发布时间】:2013-03-06 20:32:37
【问题描述】:

我使用“5.3.4 Invoke b2”阅读了boost documentation,并跟进了论坛帖子,这些帖子解释了将boost库链接到header and linker directories的详细信息,在boost帮助“4.1 Build From the Visual Studio IDE',并找到了解释 bjam.exe controls 的这个很酷的 boost 相关 wiki。

#include <boost/thread/thread.hpp>放在main.cpp中

而且,我收到此链接器错误,现有的帮助线程已确定问题出在 x64:

错误:

error LNK2019: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (?generic_category@system@boost@@YAAEBVerror_category@12@XZ) referenced in function "void __cdecl boost::system::`dynamic initializer for 'posix_category''(void)" (??__Eposix_category@system@boost@@YAXXZ)  main.obj

error LNK2019: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAAEBVerror_category@12@XZ) referenced in function "void __cdecl boost::system::`dynamic initializer for 'native_ecat''(void)" (??__Enative_ecat@system@boost@@YAXXZ)  main.obj

它们是相似的,关于'posix_category' 和关于'native_ecat' 的一些东西

所以,我尝试构建 x64 boost 库,但在放置这些库的位置上发现了相互矛盾的说明:

另外,我尝试将 vs2008 配置改回 x32 -> solutionExplorer/solution_properties/configuration_manager/active_solution_platform - Win32,关闭并重新打开 Visual Studio - 将附加目录 C/C++/general 和 Linker/general 重新链接到 Boost/root 和Boost/stage/lib - 它编译没有错误。

我对 b2 命令的最佳猜测是 --toolset=msvc-9.0 address-model=64 --build-type=complete --stagedir=lib\x64 stage

请简要说明如何在 VS2008 上构建和安装 x64 版本的 boost。此外,wiki 谈论的发布和调试是什么 - 它们不在 Boost invocation 中?

【问题讨论】:

  • 有什么理由使用安装说明中的 5.3 而不是“5.2 Simplified Build From Source”?
  • @us2012 没什么特别的 - 我看到了但不确定它是什么,它前面是“5.1 Install Visual Studio Binaries”并谈到不再生产安装的“BoostPro Computing”,所以我可能跳过了它,然后去了看起来像我读过的关于 bjam.exe 的大多数帮助线程 - 很公平......
  • 我并不是说它会解决你的问题,但由于它是完全自动化的并且超级好用,我建议你至少尝试一下。
  • 是的,但让我担心的是超级自动化和超级简单的部分。我安装了 VS 2005、2010 和 beta 2011,在早期安装中导致自动化和简单的方法变得复杂和令人费解:)
  • 我在使用 boost 自动链接时遇到了这个问题,并通过添加 #include <..> 来修复它

标签: c++ boost bjam


【解决方案1】:

使用 c++ 11

它或多或少包含了我想要使用的 boost 的所有功能,也可以在 g++ 中编译,而无需弄清楚如何在我的大学服务器上构建 boost 库,然后引用到远程 g++ 构建 - 几乎解决了所有问题

【讨论】:

  • C++11 标准库并不是 Boost 的完全替代品。此外,大多数 Boost 库都是仅头文件,根本不需要您预先编译任何东西,那些很少依赖其他库的库,因此您只需复制它们的源代码并使用适当的构建编译它们工具,例如参见github.com/filmor/webos-pdf
  • 我正在使用 boost::thread 两天后无法弄清楚如何在 g++ 构建中获取库 - 即使我这样做了,在 RedHat 的 6.4 版本中也存在错误 - C++ 11 工作。我对处于相同情况的其他人的建议是使用 c++ 11。此外,您的链接不会指向任何内容。
  • 您能否详细说明 Red Hat 中的错误?此外,这个问题显然是关于 Windows 的,所以情况完全不同。我提供的链接指向我的一个项目,我在其中集成了 Boost.Thread 库,在其中添加 4 个源文件就足够了(参见github.com/filmor/webos-pdf/tree/master/boost_thread)。
  • 你是对的 - 我问了这个关于 win 的问题,但这是 linux 版本的更大努力的一部分,即使我用 x64 库解决了这个问题,它显然也会失败。我不应该在这个帖子中提到它——我还在我们大学的电子邮件讨论中发布了一个问题,并被警告说“如果这是在 Red Hat Enterprise Linux 6.4 上,6.4 中引入了一个带有 boost 线程库和gcc/g++ 库存版本 6.4:Red Hat Bugzilla Bug 908774" 我对 c++ 11 线程解决方案很满意,但现在了解您的解决方案将如何工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多