Добавить внешнюю библиотеку (например, Eigen) через CMake

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

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

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

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

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

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

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

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

1

Решение

Итак, я решил эту проблему и подумал, что могу поделиться решением для всех, кто может столкнуться с этой проблемой.

Добавление библиотеки Eigen довольно просто, так как это только заголовочные файлы. Вы просто копируете и вставляете все файлы заголовков в каталог вашего проекта и используете каталоги include. Вы должны быть в порядке после.

Что касается ссылок на XGBoost, они просто добавили файл cmake для этого проекта. Итак, что вам нужно сделать, это построить этот проект в Visual Studio. После сборки вы получите файлы .lib, .dll и .exe. Вам нужен только файл .lib. Скопируйте и вставьте их в каталог вашего проекта и свяжите его с основным проектом следующим образом:

TARGET_LINK_LIBRARIES(ProjectName libxgboost)

Затем вам нужно справиться и вставить каталог include (содержащий файлы заголовков) из каталога xgboost куда-нибудь в каталог вашего проекта. Помимо libxgboost, вы также должны включить библиотеки rabit и xgboost. Итак, просто скопируйте и вставьте их, когда вы копируете и вставляете libxgboost.lib, и связывайте их, используя target_link_directories.

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

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]