добавить библиотеки Armadillo в компилятор g++ в linux

Я пытаюсь установить библиотеку C++ (armadillo) в кластере unix, где у меня нет прав root.

Мне удалось скомпилировать библиотеки C++ без прав пользователя, выполнив следующую команду make:

make install DESTDIR=my_usr_dir

Но затем в файле readme броненосца говорится:

где "my_usr_dir" предназначен для хранения заголовков C++ и файлов библиотек. Убедитесь, что ваш компилятор C++ настроен на использование подкаталогов, присутствующих в этом каталоге.

Компилятор, который броненосец использует для установки библиотек, — gcc-4.8.1. Я не уверен, где был установлен компилятор, но он загружается, когда я запускаю сеанс в кластере unix.

После установки броненосца я пытаюсь скомпилировать открытый исходный код, использующий библиотеки броненосца. Этот открытый исходный код также имеет make-файл.

Однако, когда я перехожу к открытому исходному коду и ввожу:

make 

он вызывает g++. Как я могу убедиться, что g++ распознает библиотеки броненосцев, ранее установленные в my_usr_dir?

В настоящее время я получаю следующую ошибку, если я перехожу к src, а затем набираю make:

opencode.cpp:28:21: fatal error: armadillo: No such file or directory
 #include <armadillo>
                     ^
compilation terminated.
make: *** [mmcollapse] Error 1

person user2805568    schedule 11.10.2013    source источник
comment
У вас должно быть некоторое базовое понимание, прежде чем спрашивать о SO. Вы когда-нибудь читали справочные страницы gcc (man gcc)? В частности разделы о -I, -l и -L?   -  person Walter    schedule 12.10.2013
comment
@Walter проблема решена, спасибо.   -  person user2805568    schedule 13.10.2013


Ответы (3)


ты можешь использовать

 alias gcc="gcc -I./my_usr_dir/include -L./my_usr_dir/lib"

и так далее в вашем файле .bashrc. Таким образом, всякий раз, когда вы вызываете gcc в командной строке, флаги будут добавляться перед каждым другим аргументом, который вы вводите в командной строке.

person Roberto    schedule 11.10.2013
comment
проблема оказалась немного сложнее, пожалуйста, дайте мне знать, если у вас есть какие-то предложения... - person user2805568; 12.10.2013
comment
Я пробовал: alias g++=g++ -I.‹myuserdir›/include -L.‹myuserdir›/lib, но все равно получаю ошибку. - person user2805568; 12.10.2013
comment
ты пробовал #include <armadillo.h>? Я думаю, что только стандартные заголовки не имеют расширения - person Roberto; 12.10.2013
comment
спасибо, ваш ответ натолкнул меня на мысль, я только что изменил make-файл, и теперь он работает... - person user2805568; 12.10.2013

Я думаю, что файл readme относится к использованию заголовков библиотек и файлов библиотек из приложений. Чтобы они были полезными, компилятор/компоновщик/загрузчик (обычно все они управляются «компилятором») должны знать, где их найти. Компилятор всегда ищет в некоторых каталогах по умолчанию, таких как /usr/include (для заголовков) и /usr/lib/ (для библиотек), но для записи в них требуется разрешение root. Однако вы можете указать компилятору с помощью флага -Iкаталог искать заголовки в каталоге каталог. Для библиотек используйте -l и -L (проверьте справочную страницу вашего компилятора). Вам также может понадобиться рассмотреть переменные среды LD_LIBRARY_PATH и LD_RUN_PATH, если вы используете динамическую компоновку (общие объектные файлы).

person Walter    schedule 11.10.2013
comment
пожалуйста, обратитесь к новому вопросу, там я объясняю весь процесс ... может быть, я сделал что-то не так, но я продолжаю получать сообщение об ошибке. - person user2805568; 12.10.2013
comment
Кажется, вы не прочитали мой ответ. В нем точно объяснялось, что вам нужно делать: использовать флаги компилятора -I и -L. Также сказано, что вы должны прочитать справочную страницу компилятора (man gcc), где все это объясняется более подробно. Вы? - person Walter; 12.10.2013

Этот вопрос похож на

Как указать путь к общей библиотеке не по умолчанию в GCC Linux? Ошибка при загрузке общих библиотек во время работы

Если вы не хотите менять .bashrc

используйте -rpath, как было предложено в сообщении выше.

gcc XXX.c -o xxx.out -Lmy_usr_dir -lXX -Wl,-rpath=my_usr_dir

-L для статической компоновки -rpath для добавления каталога в путь поиска компоновщика

больше о -rpath здесь

Я не понимаю -Wl,-rpath -Wl,

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

person Ravi    schedule 11.10.2013
comment
спасибо, проблема немного отличается от предыдущей, я отредактировал q - person user2805568; 12.10.2013
comment
-I/location/of/header/file, предложенный @Roberto, должен решить вашу проблему - person Ravi; 12.10.2013