使用Qt的qmake管理boost::filesystem代码时出现LNK2019问题

原创 2016年08月29日 12:02:20

使用QT管理包含有BOOST的代码会出现种种问题,下面的代码使用qmake创建的vcproj编译通过了

    string dir_name = sec_log_namespace::logfile_name;
    boost::filesystem::path logFilePath(dir_name);
    boost::filesystem::path logFileDir = logFilePath.parent_path();
    if (!boost::filesystem::exists(logFileDir)) {
        boost::filesystem::create_directory(logFileDir);
    }

但是链接时出错:

1>sec_log.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl boost::filesystem::path_traits::convert(char const *,char const *,class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > &,class std::codecvt<unsigned short,char,int> const &)" (__imp_?convert@path_traits@filesystem@boost@@YAXPBD0AAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@ABV?$codecvt@GDH@5@@Z) referenced in function "void __cdecl boost::filesystem::path_traits::convert(char const *,char const *,class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > &)" (?convert@path_traits@filesystem@boost@@YAXPBD0AAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@Z)
1>sec_log.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: static class std::codecvt<unsigned short,char,int> const & __cdecl boost::filesystem::path::codecvt(void)" (__imp_?codecvt@path@filesystem@boost@@SAABV?$codecvt@GDH@std@@XZ) referenced in function "void __cdecl boost::filesystem::path_traits::convert(char const *,char const *,class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > &)" (?convert@path_traits@filesystem@boost@@YAXPBD0AAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@Z)

把上面代码放到单独创建的vc工程中,发现没有问题,能编译,能链接。于是怀疑是编译环境问题,比较cl的command line,发现有个-Zc:wchar_t的选项。查了stackflow发现也是字符类型的问题,于是测试

打开vs中的Project->Properites,选择Configuration Properties->C/C++->Language->Treat wchar_t as Build-in type改成Yes。OK,链接成功。

然后改pro文件,加上下面一段:

    win32:contains(QMAKE_CC, cl){
        QMAKE_CXXFLAGS += -Zc:wchar_t
    }



版权声明:本文为博主原创文章,未经博主允许不得转载。

boost::filesystem使用手册

对于 I/O 操作较多的程序,这样的不一致就意味着需要进行大量的工程工作才能在平台间移植代码。正是因为这个原因,我们才引入了 BoostFilesystem Library。这个广泛使用的库提供了安全...
  • yacper
  • yacper
  • 2010年02月05日 20:58
  • 14741

windows下QT编译使用boost

1,首先是下载boost, 这里我用的是1_62版本的,系统是win10,vs2013,QT是5.7_32 boost下载完成后解压缩后,里面会有一个bootstrap.bat的批处理文件, 这里执...
  • cqltbe131421
  • cqltbe131421
  • 2017年01月22日 13:20
  • 494

qmake不是内部命令或者已经安装了Qt还是无法使用qmake

第一,在环境变量设置里面的系统变量找到pqth 点开 接着,点开我的电脑,在收索栏输入qmake.exe,收索出qmake所在的目录 最后,在环境变量的path里面新建一个将目录复制进去点击...
  • cqltbe131421
  • cqltbe131421
  • 2016年11月23日 14:46
  • 2284

关于.Pro文件中引入源文件的不同写法,导致QMake无法生成正确的Makefile文件的错误

缘起 今天用Qt Creator 3.4.1 打开一个很老的工程,还是QT 4.5.2的,VS2008版本编辑的;没有语法错误,却在链接时提示"LNK2019: 无法解析的外部符号 "public: ...
  • tom06
  • tom06
  • 2016年05月06日 11:35
  • 1068

Qt qmake 构建 运行 都出错解决方法

在学习《Qt Creator快速入门》使用书中提供的源码程序时,打开源码程序,不论是执行qmake,还是构建程序,还是执行程序均出现错误,并且不给错误提示消息...
  • jh1513
  • jh1513
  • 2016年08月24日 21:39
  • 1161

boost::filesystem常用功能

boost库文档 system_complete(path); 返回完整路径(相对路径 + 当前路径) exists(path); 目录是否存在 is_directory(path); is_...
  • qq_34581491
  • qq_34581491
  • 2017年02月03日 15:50
  • 351

QTCreator + MSVC10编译器 使用boost::filesystem 时 error LNK2019: codecvt ... 问题的解决

今天在将一个QTCreator管理的项目 从Linux下 拿到Windows 下(使用MSVC10编译器) 来编译时发现居然通不过。报了以下连接错误: error LNK2019: 无法解析的外部符...
  • andyjim
  • andyjim
  • 2014年01月17日 22:14
  • 1561

boost::filesystem库使用入门

以下知识点转自:点击打开原文链接 今天拿起手要用C++写个小工具,从指定的目录递归遍历文件,然后做一下处理。又翻了一下boost的filesystem库。小结一下,希望能加深印象,免得下次又...
  • hp_justdoit
  • hp_justdoit
  • 2014年07月01日 18:31
  • 1602

Boost中文件系统类FileSystem全面解析

Boost中文件系统类FileSystem全面解析
  • cmw2008free
  • cmw2008free
  • 2014年07月05日 21:13
  • 2096

当执行构建步骤“qmake”时

有时我们在导入别人的QT项目时,点击编译,会提示“构建***项目发生错误,当执行构建步骤“qmake”时”,这是因为我们在导入项目的时候没有指定qt版本的原因,只需选择项目选项,如下图   然...
  • hn307165411
  • hn307165411
  • 2012年02月14日 18:40
  • 8346
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Qt的qmake管理boost::filesystem代码时出现LNK2019问题
举报原因:
原因补充:

(最多只允许输入30个字)