x64 上 Boost 1.53 和 VS 2013 的链接器错误
Linker error with Boost 1.53 and VS 2013 on x64
我已经在 SO 和其他一些地方发现了这个问题,它总是与 linking x64 构建上的 32 位库有关,反之亦然,例如:Boost linker error: Unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_system_category(void)"
1>base_pcount.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAAEBVerror_category@12@XZ)
1>base_pcount.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (?generic_category@system@boost@@YAAEBVerror_category@12@XZ)
但我 99% 确定我正在 link 构建 x64。
- 我正在使用 x64 目标构建我的程序
- 我正在使用 boost 1.53
- 我使用的是 Vs 2013
我使用以下命令构建了系统库(来自 VS 2013 x64 开发人员控制台):
bootstrap.bat
.\b2 --build-dir=C:\boost_1_53_0\binaries toolset=msvc-12.0 link=static threading=multi variant=release -address-model=64 架构=x86 系统
所以在这一点上,boost 实际上不是为 x64 构建的,或者我的程序不是为 x64 构建的。任何想法这里可能出了什么问题?
不幸的是,也没有人为 vs 2013 提供预编译的二进制文件,所以我完全被卡住了。
编辑:我 "solved" 通过升级到 boost 1.57 并使用新版本提供的预编译二进制文件来做到这一点。似乎 boost 1.53 从未打算与 2013 一起使用。
有点晚了,但我没有早点看到你的问题。
您需要删除 address-model=64
前面的 -
- 这是 属性,不是一个选项。所以我认为你毕竟不是为 64 位构建的,因为 -address-model=64
被认为是一个(可能无效的)选项。
我已经在 SO 和其他一些地方发现了这个问题,它总是与 linking x64 构建上的 32 位库有关,反之亦然,例如:Boost linker error: Unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::get_system_category(void)"
1>base_pcount.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAAEBVerror_category@12@XZ)
1>base_pcount.obj : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (?generic_category@system@boost@@YAAEBVerror_category@12@XZ)
但我 99% 确定我正在 link 构建 x64。
- 我正在使用 x64 目标构建我的程序
- 我正在使用 boost 1.53
- 我使用的是 Vs 2013
我使用以下命令构建了系统库(来自 VS 2013 x64 开发人员控制台):
bootstrap.bat
.\b2 --build-dir=C:\boost_1_53_0\binaries toolset=msvc-12.0 link=static threading=multi variant=release -address-model=64 架构=x86 系统
所以在这一点上,boost 实际上不是为 x64 构建的,或者我的程序不是为 x64 构建的。任何想法这里可能出了什么问题? 不幸的是,也没有人为 vs 2013 提供预编译的二进制文件,所以我完全被卡住了。
编辑:我 "solved" 通过升级到 boost 1.57 并使用新版本提供的预编译二进制文件来做到这一点。似乎 boost 1.53 从未打算与 2013 一起使用。
有点晚了,但我没有早点看到你的问题。
您需要删除 address-model=64
前面的 -
- 这是 属性,不是一个选项。所以我认为你毕竟不是为 64 位构建的,因为 -address-model=64
被认为是一个(可能无效的)选项。