使用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使用时编译错误

使用boost.filesystem使用时编译错误 错误(我的是vs2008): 1>main.obj : error LNK2019: 无法解析的外部符号 "private: stati...
  • niying
  • niying
  • 2012年11月08日 10:16
  • 2314

linux和windows平台上获取系统时间

2.windows平台上:

Linux 如何生成静态库和动态库

1、引言1、linux下的库 静态库和共享库(动态库),二者的不同点在于代码被载入的时刻不同。 静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。 共享库的代码是在可执行程序运行时才载...

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

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

Qt 使用qmake 遇到 warning LNK4042: object specified more than once; extras ignored 错误的处理办法

当同一个工程下出现两个文件名相同的cpp文件而又没办法修改文件名时,编译器链接时会报错链接错误 lnk:4042 对于qt的工程该如何解决呢? 网上有种说法: 在工程pro中加入 CONF...

写模板类时遇到的LNK2019问题

在学习数据结构的时候,老师让我们自己实现堆栈。我采用了模板类的方式,延续了以往写c++类时的习惯,我将模板的声明写在了h头文件之中,而将实现单独的写在了实现的cpp文件之中,可是当我在主函数之中调用模...

QT一些error(C1057、LNK2019、C2146、C3861)的解决

最近在玩QT,经常会报一些第一眼看不懂在讲啥的错误。总结了一下。 报错一: C1057:宏扩展中遇到意外的文件结束 双击找到报错的那行,一般是括号不匹配。 看网上资料说,也可能是编码问题,可以...

Linker Tools Error LNK2019官方错误原因和个人碰到的一些问题

本文摘取官网文章,超链接地址含有所有的链接错误详解

[VS2013+Win7]GLEW库配置问题 error LNK2019: 无法解析的外部符号 _gluGetString@4

error LNK2019: 无法解析的外部符号 __imp__glGetString@4,该符号在函数 _main 中被引用。 我的解决方法是添加#include 然后还有编译错误,又将free...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Qt的qmake管理boost::filesystem代码时出现LNK2019问题
举报原因:
原因补充:

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