如何将使用boost :: asio的本机C ++静态库导入CLI / C ++混合模式应用程序?

时间:2016-11-09 11:24:41

标签: c++ boost c++-cli

我有一个C ++ / CLI命令行客户端,我正在尝试导入本机C ++库,而后者又有#include <boost/asio.hpp>

当我尝试导入时,我收到以下错误:

2>C:\boost_1_54_0\boost/asio/generic/detail/endpoint.hpp(27): error C2059: syntax error : 'generic'
2>C:\boost_1_54_0\boost/asio/generic/detail/endpoint.hpp(27): error C2143: syntax error : missing ';' before '{'
2>C:\boost_1_54_0\boost/asio/generic/detail/endpoint.hpp(27): error C2447: '{' : missing function header (old-style formal list?)
2>C:\boost_1_54_0\boost/asio/generic/detail/impl/endpoint.ipp(32): error C2059: syntax error : 'generic'

包含必须位于静态lib的标题中,因为它们是成员变量。

那么从static / native lib导入和使用这些类的最简单的选项是什么?

1 个答案:

答案 0 :(得分:2)

这个问题出现在boost trac上,你可以找到它here。解决方案(Michael Rasmussen礼貌)暂时就是这样做

#ifdef __cplusplus_cli
#define generic __identifier(generic)
#endif>
#include <boost/filesystem.hpp>
#ifdef __cplusplus_cli
#undef generic
#endif

并包含你的boost包含,这些ifdefs中存在泛型符号的问题。

编辑:我错过了关于你的库是静态库的一点,你可能想要使用动态增强库,这可以避免定义多个符号的问题。使用BOOST_ALL_DYN_LINK预处理器定义来改为使用boost dlls。