Windows (VS2015)에서 여러 파일 형식을 읽을 수있는 프로그램 (C++)을 만들려고합니다. 이를 위해 MyProgram 프로젝트 (주 프로그램)와 MyLibrary 프로젝트 (여러 파일 형식에 대한 여러 가지 구문 분석기 포함)를 사용하여 솔루션을 만들었습니다. MyProgram에서 프로그램 입력을 기반으로 파서 개체를 만듭니다.자체 라이브러리를 다른 라이브러리에 연결하는 정적 라이브러리에 프로그램 연결
모든 것이 잘 작동하고있었습니다.
그러나 외부 라이브러리 인 nifticlib를 사용하여 정적 라이브러리로 다운로드하고 컴파일 한 새로운 파일 형식 파서 (NiftiParser)를 만들려고했습니다.
그래서 NiftiParser 클래스를 만들었습니다.이 클래스는 몇 가지 메서드를 구현하며 내부적으로 nifticlib를 호출합니다. 프로젝트 속성에 include dir 및 library dir을 추가했는데 오류없이 컴파일되었습니다. 그런 다음 생성 된 Parser.lib가 있습니다.
1>------ Build started: Project: Parser, Configuration: Debug x64 ------
1> nifti_parser.cc
1> Parser.vcxproj -> C:\Users\Laurent\Documents\C++-build\Projects\Parser\Debug\Parser.lib
2>------ Build started: Project: MyProgram, Configuration: Debug x64 ------
2>Parser.lib(nifti_parser.obj) : error LNK2019: unresolved external symbol nifti_image_read referenced in function "public: __cdecl NiftiParser::NiftiParser(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" ([email protected]@[email protected][email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@Z)
2>C:\Users\Laurent\Documents\C++-build\Projects\Debug\MyProgram.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 1 succeeded, 1 failed, 3 up-to-date, 0 skipped ==========
나는 이런 일이 왜 이해 확실하지 않다 : 나는 MyProgram를 컴파일하려고 할 때
하지만, 난 안 해결되고 nifticlib 라이브러리의 일부 기능에 대한 오류가 발생했습니다. 내가 포함하는 경로와 nifticlib의 라이브러리 디렉토리를 MyProgram 프로젝트에 추가하려고 시도했지만 여전히 문제가 있습니다.
저는 Visual Studio (Linux에서 작업하던 곳)의 컴파일/연결 프로세스가 무엇인지 이해할 수 없습니다.
프로젝트는 정적 라이브러리 인 경우에만 컴파일되고 연결 부분은 프로그램 자체를 컴파일하려고 할 때 발생합니다. 맞습니까?
또한, nifticlib가 연결되어야하는 위치가 확실하지 않습니다. Parser.lib (라이브러리의 기능을 사용하는 곳) 또는 프로그램에 직접 연결해야합니까?
감사합니다.
추신 : nifticlib의 설치 디렉토리에는 헤더와 .lib 만 있습니다. .cpp 파일도 필요합니까, 아니면 .lib에 이미 포함되어 있습니까?
편집 : 좋아, 내가 Parser.lib을 컴파일 어떤 문제를하지 않은 이유는 nifticlib에 연결하지 않기 때문에 즉, 아마 그래서 분명히 아무것도에 연결하지 않는 정적 라이브러리로 뭔가를 구축, MyProgram은 그것을 필요로합니다. Parser 프로젝트에 nitficlib의 include dir 만 포함시켜야하고 Parser.lib와 nifticlib을 MyProgram 프로젝트에 넣어야합니까?
매우 완벽한 답변을 해주셔서 감사합니다. 나는 지금 그것을 알아낼 수 있어야한다. 또 하나의 질문이지만 입력 -> 추가 종속성에 라이브러리를 추가 할 때 전체 경로 또는 라이브러리 이름 만 지정해야합니까? – whiteShadow
그냥 이름입니다. 디렉토리 경로는 VC++ 디렉토리 -> 라이브러리 디렉토리에 지정됩니다. 또한 MyLibrary와 MyProgram 프로젝트가 동일한 솔루션 내에 있으면 라이브러리 디렉토리에 대해 전혀 염려 할 필요가 없습니다. VS는 앱의 다른 버전 (디버그/릴리스, x86/x64 등)을 빌드하는 경우를 포함하여 올바르게 파악할 수 있어야합니다. 라이브러리 이름을 종속성에 넣기 만하면됩니다. –
도움을 많이 주셔서 감사합니다. VS에서 나를 혼란스럽게 생각하는 것은 정보를 어디에 넣을 것인가입니다. 필자는 솔루션, 프로젝트 등의 개념에 익숙하지 않고 라이브러리 디렉토리를 어디에 둘 것인지 ... Linux에서는 커맨드 라인이나 cmake를 사용하여 쉽게 찾을 수 있습니다. 하지만 고마워요 : D – whiteShadow