相关疑难解决方法(0)

Visual Studio 2015中的编译器

谁能告诉我Visual Studio 2015 for C++项目内置了什么编译器?我尝试了它并尝试了旧版本的编译器,它给了我其他编译结果.它是GNU C++版本4.8.2还是更新版本?

c++ visual-studio visual-c++ visual-studio-2015

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

LNK2001:我的boost库(可能)构建不正确

我决定将我的boost库从1.61更新到1.63,在我更新的项目中使用新文件,我收到一些我以前没有得到的新错误消息:

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)
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)
Run Code Online (Sandbox Code Playgroud)

由于我的1.63库是使用Visual Studio 2017编译的,我的第一个假设是我在编译boost库时犯了一个错误,所以这里是我从boost文件的一个干净解压缩中得到的总步骤:

  1. 开始菜单→Visual Studio 2017 RC→开发人员命令提示符
  2. 我更改目录,直到我在高级boost_1_63_0文件夹中.
  3. 我跑 bootstrap.bat
  4. 我打开project-config.jam进行编辑
  5. using msvc ;改为using msvc : 14.1 : E:\Program Files\Microsoft Visual Studio\VC\Tools\MSVC\14.10.24911\bin\HostX64\x64\;
  6. 我打开boost/config/auto_link.hpp进行编辑
  7. 我对此文件进行了编辑(列表后面列出的代码)
  8. 在打开命令提示符下,我执行命令 b2 architecture=x86 address-model=64 link=static threading=multi runtime-link=shared --build-type=complete stage --stagedir=stage/x64 -a
  9. 它在最后以下面的消息完成(在列表后面列出)
  10. 我尝试将这些库与我的代码一起使用,#define BOOST_LIB_DIAGNOSTIC用于跟踪正在使用的文件(它们是).
  11. 我尝试编译使用boost.asio的项目,并获得上面列出的两个未解决的外部符号错误.

有谁知道我的错误在哪里?如果我使用在Visual Studio 2017 RC中使用Visual Studio …

c++ boost visual-studio lnk2001

7
推荐指数
1
解决办法
1539
查看次数

在MS Visual Studio 2017中将boost :: thread与CMake结合使用会导致两个编译器错误

我想在项目中使用boost :: thread,并且将CMake用作构建工具。但是,即使是非常简单的设置也会导致两个编译器错误:

main.cpp

#include <boost/thread.hpp>

int main() 
{
    boost::thread t;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

CMakeLists.txt

cmake_minimum_required (VERSION 2.6)
project (ThreadTest)

set(Boost_USE_STATIC_LIBS OFF) 
set(Boost_USE_MULTITHREADED ON)  
set(Boost_USE_STATIC_RUNTIME OFF) 
find_package(Boost 1.58.0 COMPONENTS random thread) 

set(SOURCE_DIR src)
set(SOURCE_FILES
    ${SOURCE_DIR}/main.cpp
    )

if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS}) 
    add_executable(test ${SOURCE_FILES})
    target_link_libraries(test ${Boost_LIBRARIES})
endif()
Run Code Online (Sandbox Code Playgroud)

我正在使用Boost 1.68.0,CMake可以找到它,并且能够构建正确的Visual Studio项目文件。

我尝试使用boost :: random,它起作用了。

但是,编译上面的程序会导致两个错误消息:

  • E2512:功能测试宏的参数必须是一个简单的标识符(指出增强文件error_code.hpp中的错误)
  • LINK1104:无法打开文件'libboost_thread-vc14 1 -mt-x64-1_68.lib'

这是error_code.hpp中的引发错误的行

在此处输入图片说明

我在boost安装中寻找了文件'libboost_thread-vc14 1 -mt-x64-1_68.lib',但仅找到'boost_1_68_0 \ lib64-msvc-14.0 \ boost_thread-vc14 0 -mt-gd-x64-1_68.lib'

链接器设置包含正确的文件:

在此处输入图片说明

所以,我有两个问题:

  1. 为什么error_code.hpp中存在编译错误,它是boost :: system模块的一部分,我该怎么办?
  2. VS为什么要链接文件libboost_thread-vc14 1 -mt-x64-1_68.lib,而不是链接正确且可用的libboost_thread-vc14 0 -mt-x64-1_68.lib?

c++ boost cmake boost-thread

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