我正在尝试使用带有Boost的C++开发跨平台应用程序。
我通常在* nix环境中编程,在该环境中,我始终按如下方式定义“main”:
int main( const int argc, const char* argv[] )
{
...
}
对于此应用程序,我将从Windows环境开始使用Visual Studio 2003。
当我尝试使用带有该定义的boost::program_options时,我从program_options::store获得编译错误:
po::options_description desc("Supported options");
desc.add_options()...;
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, desc), vm);
错误:
main.cpp(46) : error C2665: 'boost::program_options::store' : none of the 2 overloads can convert parameter 1 from type 'boost::program_options::basic_parsed_options<charT>'
with
[
charT=const char
]
c:\boost_1_38_0\boost\program_options\variables_map.hpp(34): could be 'void boost::program_options::store(const boost::program_options::basic_parsed_options<charT> &,boost::program_options::variables_map &,bool)'
with
[
charT=char
]
c:\boost_1_38_0\boost\program_options\variables_map.hpp(43): or 'void boost::program_options::store(const boost::program_options::basic_parsed_options<wchar_t> &,boost::program_options::variables_map &)'
while trying to match the argument list '(boost::program_options::basic_parsed_options<charT>, boost::program_options::variables_map)'
with
[
charT=const char
]
我试图通过如下定义main来强制wchar_t函数:
int main( const int argc, wchar_t* argv[]){
...
}
然后编译,但是出现链接错误:
main.obj : error LNK2019: unresolved external symbol "void __cdecl boost::program_options::store(class boost::program_options::basic_parsed_options<unsigned short> const &,class boost::program_options::variables_map &)" referenced in function _main
main.obj : error LNK2019: unresolved external symbol "public: __thiscall boost::program_options::basic_parsed_options<unsigned short>::basic_parsed_options<unsigned short>(class boost::program_options::basic_parsed_options<char> const &)" referenced in function "public: class boost::program_options::basic_parsed_options<unsigned short> __thiscall boost::program_options::basic_command_line_parser<unsigned short>::run(void)"
main.obj : error LNK2019: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl boost::program_options::to_internal(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &)" referenced in function "class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > __cdecl boost::program_options::to_internal<class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > >(class std::vector<class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >,class std::allocator<class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > > > const &)"
最后,如果我使用Visual Studio的默认主定义设置,它将编译并链接:
int main( const int argc, _TCHAR* argv[]){
...
}
因此,这对Windows很有好处,但是当我尝试将它带到* nix时,该功能可以工作吗?这些系统通常是否定义_TCHAR类型?我还没有亲身经历过。
定义main在Windows和* nix上运行以及与boost::program_options库一起使用的正确方法是什么?
最佳答案
这似乎是与常数相关的问题。尝试:
int main( int argc, char* argv[] )
{
// ...
}
关于c++ - 使用boost::program_options的首选跨平台 'main'定义是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1066137/