2016-06-23 2 views
1

나는이 문제를 몇 주 동안 처리해 왔습니다. 나는 내가 알지 못하는 사소한 단계를 놓치고있을 뿐이라는 것을 알고있다. 그래서, 어떤 통찰력이 높게 평가 될 것입니다.CMake를 통해 외부 라이브러리 (예 : Eigen) 추가

일부 외부 라이브러리를 추가하고 C++ 프로젝트에서 사용하려고합니다. 그러나 방법을 이해할 수있을 것 같지 않습니다. 나는 외부 라이브러리를 추가하는 것에 관한 인터넷의 모든 게시물을 읽었지만 나는 무엇인가 놓치고 있다고 생각한다!

예를 들어, Eigen (헤더 전용 라이브러리)과 같은 간단한 라이브러리를 추가하고 싶습니다. 내 프로젝트의 하위 폴더에있는 모든 파일이 들어있는 폴더를 복사하여 붙여 넣습니다. 서브 팜 ThirdPartyLibraries라고 불렀습니다.

INCLUDE_DIRECTORIES("${MAINFOLDER}/ThirdPartyLibraries/eigen") 

내가해야 할 다른 것이 있습니까?

이제 XGBoost (헤더와 소스 파일을 모두 가지고 있음)와 같은 다른 라이브러리를 추가하고 싶다고합시다. 어떻게 다른가?

나는 XGBoost와 비슷한 것들을했습니다. 내 코드는 오류없이 빌드 될 수 있지만, 라이브러리의 함수를 참조하지 않는 한 (기본적으로 라이브러리를 사용하지 않고 프로젝트에 라이브러리를 추가하는 것만 큼). 함수 중 하나를 사용하려고하면 라이브러리를 추가하는 동안 뭔가 빠졌다고 생각하는 "해결되지 않은 외부 기호"에 대한 오류가 발생합니다.

내 C++ 코드에 라이브러리를 추가하지 않았습니다. 그래서, 당신이 설명을 간단하게 유지할 수 있다면, 좋을 것입니다!

+1

'라이브러리를 추가하는 동안 무언가를 놓치고 있다고 생각되는 "해결되지 않은 외부 심볼"에 대해 오류가 발생합니다. - [target_link_libraries] (https://cmake.org/cmake/help/) 호출이 필요합니다. v3.0/command/target_link_libraries.html). – Tsyvarev

+0

감사. 그건 의미가 있습니다. 목표로 설정해야하는 파일은 무엇입니까? .os 또는 .dll 파일을 찾을 수 없습니다. –

+0

'.os 또는 .dll 파일을 찾을 수 없습니다. '- 그래서 라이브러리를 빌드해야합니다. – Tsyvarev

답변

2

그래서이 문제를 해결하고이 문제를 해결할 다른 사람들을 위해 해결책을 공유한다고 생각했습니다.

Eigen 라이브러리를 추가하는 것은 헤더 파일이기 때문에 매우 간단합니다. 모든 헤더 파일을 프로젝트 디렉토리의 어딘가에 복사하여 붙여 넣기 만하면 include 디렉토리가 사용됩니다. 너 괜찮을거야.

XGBoost 연결에 관해서, 그들은 그 프로젝트에 대한 cmake 파일을 추가했습니다. 따라서 Visual Studio에서 해당 프로젝트를 빌드해야합니다. 빌드가 끝나면 .lib, .dll 및 .exe 파일이 생성됩니다. .lib 파일 만 있으면됩니다. 복사하여 프로젝트의 디렉토리에 어딘가에 붙여 넣기와 같은 주요 프로젝트에 연결 : 다음

TARGET_LINK_LIBRARIES(ProjectName libxgboost) 

, 당신은 어딘가로 xgboost 디렉토리에서 (헤더 파일을 포함) include 디렉토리를 극복하고 붙여 넣기해야 프로젝트 디렉토리. libxgboost 외에도 rabit 및 xgboost 라이브러리도 포함시켜야합니다. 따라서 libxgboost.lib를 복사하여 붙여 넣을 때 복사하여 붙여 넣기 만하고 'target_link_directories'를 사용하여 링크하십시오.

라이브러리의 모든 기능을 사용하려면 헤더 파일을 포함해야합니다.

호프가 도움이되기를 바랍니다.

+0

리눅스에서 xgboost를 사용하고 싶습니다. Visual Studio가없는 방법이 있습니까? 라이브러리를 설치하고 사용하는 방법은 무엇입니까? –

+0

Linux 용 설명서를 참조하십시오. Windows에서 작업 중이므로 Linux 구성을 확인하지 않았습니다. 그러나 Linux는 실제로 더 직관적 일 수 있습니다. –

+0

죄송합니다. 내가 의미하는 바는 "윈도우에서 xgboost를 사용하고 싶다." –