Как включить библиотеку в C ++, созданную из исходного кода? [LINUX] - PullRequest
0 голосов
/ 05 мая 2020

Я клонировал репозиторий библиотеки C ++ под названием «mlpack». Я создал библиотеку с помощью cmake и теперь хочу включить ее в свой файл C ++. Я использую ubuntu 19.04. Я попытался запустить команду:

g++ -std=c++11 test.cpp -I/home/koushik/Documents/'Git Repo'/mlpack/build/lib -lmlpack -larmadillo -lboost_serialization -fopenmp

Здесь /home/koushik/Documents/'Git Repo'/mlpack/build/lib - каталог сборки библиотеки. Я попробовал эту команду, думая, что она будет искать включения в этом каталоге сборки. Но я получаю сообщение об ошибке:

test.cpp:1:10: fatal error: mlpack/core.hpp: No such file or directory
 #include <mlpack/core.hpp>
          ^~~~~~~~~~~~~~~~~
compilation terminated.

, когда я пытаюсь включить библиотеку и скомпилировать код.

Помимо указанной выше команды, я также попробовал

$ export LD_LIBRARY_PATH='/home/koushik/Documents/Git Repo/mlpack/build/lib'
$ g++ -std=c++11 test.cpp -lmlpack -larmadillo -lboost_serialization -fopenmp

Это не удалось также дать ту же ошибку, что и выше.

Я хотел бы пояснить, что у меня есть все другие связанные библиотеки, установленные через apt, и они отлично работают при связывании в других файлах C ++. Из исходников собирается только mlpack, и я пытаюсь включить его.

1 Ответ

0 голосов
/ 05 мая 2020

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

Что вы хотите сделать, так это выбрать место на вашем компьютере, где вы хотите установить библиотека и ее заголовки. Затем вы делаете:

mkdir lib_build
cd lib_build
cmake -DCMAKE_INSTALL_PREFIX=/path/to/install/dir path/to/lib/source
make && make install

Это обычно создает каталоги include и lib (а иногда и несколько больше, например bin или share) в указанном месте, содержащем publi c -фокусная сборка проекта.

Когда вы вносите изменения в библиотеку, вы можете повторно запустить make && make install для обновления установки.

Затем при сборке чего-то, что зависит от библиотека, вы обычно делаете:

g++ -I/path/to/install/dir/include -L/path/to/install/dir/lib ...
...