2016-06-23 2 views
1

Я занимаюсь этой проблемой в течение нескольких недель. Я знаю, что я, вероятно, просто пропустил незначительный шаг, о котором я не знаю. Таким образом, любое понимание будет высоко оценено.Добавить внешнюю библиотеку (например, Eigen) через CMake

Я пытаюсь добавить некоторые внешние библиотеки и использовать их в своем проекте на C++. Но, похоже, они не могут понять, как это сделать. Я прочитал все сообщения в Интернете о добавлении внешней библиотеки, но я считаю, что мне что-то не хватает!

Предположим, я хочу добавить простую библиотеку, такую ​​как Eigen (библиотека только для заголовка). Я копирую и вставляю папку, содержащую все файлы в подпапке в моем проекте. Я назвал подпапку ThirdPartyLibraries.

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

Есть ли что-нибудь еще, что мне нужно сделать?

Теперь предположим, что я хочу добавить еще одну библиотеку, такую ​​как XGBoost (которая имеет как заголовок, так и исходные файлы). Как это будет иначе?

Я сделал аналогичные вещи для XGBoost. Мой код может создаваться без ошибок, но это пока я не ссылаюсь ни на одну из функций в библиотеке (в основном просто добавляя библиотеку к моему проекту, не используя ее). Когда я пытаюсь использовать любую из функций, я получаю ошибки в отношении «неразрешенных внешних символов», которые заставляют меня думать, что я что-то пропускаю при добавлении библиотек.

Я не добавлял какие-либо библиотеки в свой код на C++. Итак, если вы можете просто объяснить простые объяснения, это было бы здорово!

+1

'Я получаю ошибки в отношении« неразрешенных внешних символов », из-за чего я думаю, что я что-то пропускаю при добавлении библиотек». - вы пропустите вызов [target_link_libraries] (https://cmake.org/cmake/help/ v3.0/команда/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 где-то в ваш каталог проекта. Помимо libxgboost, вы должны включить библиотеки rabit и xgboost. Итак, просто скопируйте и вставьте их, когда вы копируете и вставляете libxgboost.lib и связываете их с помощью «target_link_directories».

Когда вы используете какие-либо функции из библиотеки, обязательно включайте файлы заголовков.

Надеюсь, это поможет другим, у которых есть трудное время, чтобы заставить его работать.

+0

Я хочу использовать xgboost на linux. Есть ли способ без Visual Studio? Как установить библиотеку и использовать ее? –

+0

Вы должны обратиться к документации для Linux. Я работаю над Windows, поэтому я не проверял конфигурации Linux. Но Linux действительно может быть более простым. –

+0

Прошу прощения. Я имел в виду, что «я хочу использовать xgboost на окнах» –

Смежные вопросы