Я занимаюсь этим вопросом уже несколько недель. Я знаю, что я, вероятно, просто пропускаю незначительный шаг, о котором я не знаю. Таким образом, любое понимание будет высоко оценено.
Я пытаюсь добавить некоторые внешние библиотеки и использовать их в моем проекте C ++. Но, кажется, не в состоянии понять, как. Я прочитал все посты в интернете о добавлении внешней библиотеки, но мне кажется, что я чего-то не понял!
Допустим, я хочу добавить простую библиотеку, такую как Eigen (библиотека только для заголовков). Я скопировал и вставил папку, содержащую все файлы в подпапке в моем проекте. Я назвал подпапку ThirdPartyLibraries.
INCLUDE_DIRECTORIES("${MAINFOLDER}/ThirdPartyLibraries/eigen")
Есть ли что-нибудь еще, что мне нужно сделать?
Теперь, скажем, я хочу добавить еще одну библиотеку, такую как XGBoost (которая имеет как заголовочные, так и исходные файлы). Как бы это было иначе?
Я делал подобные вещи для XGBoost. Мой код может быть собран без ошибок, но это до тех пор, пока я не обращаюсь ни к одной из функций в библиотеке (по сути, просто добавляю библиотеку в мой проект без ее использования). Когда я пытаюсь использовать любую из функций, я получаю ошибки о «неразрешенных внешних символах», из-за которых я думаю, что что-то упускаю при добавлении библиотек.
Я не добавил никаких библиотек в мой код C ++. Так что, если вы можете сделать объяснения простыми, это было бы здорово!
Итак, я решил эту проблему и подумал, что могу поделиться решением для всех, кто может столкнуться с этой проблемой.
Добавление библиотеки 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.
При использовании любой из функций из библиотеки обязательно включайте заголовочные файлы.
Надеюсь, что это помогает другим, кому трудно заставить его работать.
Других решений пока нет …