CAA使用boost库的诸多问题

CAA由自己的编译器完成编译,所以按常规方式设置项目属性很有可能不起作用甚至出错。

CAA是模块化编程,直接#include头文件在编译时并不能被读取过来。

1. boost库的配置

  • 欲在某个Module中使用boost,就在该Module的Imakefile.mk文件中添加类似以下代码,注意路径中不能有空格,其中lib名称好像没什么用,不需配置

#.lib所在路径
LOCAL_LDFLAGS= \ 
-LIBPATH:"D:\ProgramData\boost_1_68_0\stage\lib" \  
-LIBPATH:"D:\ProgramData\boost_1_68_0\libs"     
#.lib名称
SYS_LIBS = \ 
#libboost_filesystem-vc110-mt-x32-1_68.lib \ 
#libboost_filesystem-vc110-mt-gd-x32-1_68.lib 
#头文件所在路径
LOCAL_CCFLAGS = -I"D:\ProgramData\boost_1_68_0" 
 

  • 按照非CAA的常规设置,添加附加包含目录,否则VassisX不智能提示。

2. boost库的使用

配置好之后一般只能保证编译无误,链接可能会出以下问题

  • error LNK2019: 无法解析的外部符号 "void __cdecl boost::throw_exception(class std::exception const &)"。%%解决方法,#define _CPPUNWIND
  • std::list与CAA的list对象命名空间冲突,编译器不知道该使用哪一个。%%解决方法,不使用using namespace std; 对每个std对象前加std,如std::string或using std::string;
  • 无法解析的外部符号 "void __cdecl boost::filesystem::path_traits::convert。%%解决方法,对于非CAA项目,项目 -> c/c++ -> 语言 -> 将wchar_t视为内置类型(是)一般可以解决问题,但CAA在编译时,不去读VS的项目配置,所以配置后不起作用。目前解决方法是,不将string作为boost/filesystem的输入输出,改为wstring。构造wstring时,一般为std::wstring=L"123"

猜你喜欢

转载自blog.csdn.net/originalcandy/article/details/83181889