boost :: program_options를 사용하여 선호하는 크로스 플랫폼 '메인'정의는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1066137

문제

C ++가 부스트를 사용하여 크로스 플랫폼 응용 프로그램을 개발하려고합니다.

나는 일반적으로 *nix 환경에서 프로그램을 프로그램하며, 여기서 항상 'main'을 다음과 같이 정의했습니다.

int main( const int argc, const char* argv[] )
{
...
}

이 응용 프로그램의 경우 Visual Studio 2003을 사용하여 Windows 환경에서 시작합니다.

이 정의와 함께 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
    ]

메인을 다음과 같이 정의하여 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[]){
...
}

그래서 그것은 창에 좋지만 *nix로 가져 가려고 할 때이 일이 작동합니까? 이러한 시스템은 일반적으로 _tchar 유형을 정의합니까? 나는 개인적으로 그것을 접근하지 못했습니다.

Windows 및 *Nix에서 작업하기 위해 메인을 정의하고 Boost :: Program_options 라이브러리와의 작업을 정의하는 올바른 방법은 무엇입니까?

도움이 되었습니까?

해결책

콘트 스네스 관련 문제인 것 같습니다. 노력하다:

int main( int argc, char* argv[] )
{
  // ...
}

다른 팁

int main() 그리고 int main(int argc, char* argv[]) (일명 int main(int argc, char** argv))는 C ++ 표준 승인 서명입니다.

VisualStudio는 (1) 당신이 main() 또는 a WinMain() (2) 원하는지 결정합니다 chars 또는 wchar_t에스. VisualStudio가 콘솔 애플리케이션에서 일하고 있다고 생각하지 않으면 call split_winmain ().

당신이 강요하고 싶다면 chars (내가 추천 할 것) 당신은 #undef UNICODE.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top