Компиляция — я получаю ошибку сегментации в исполняемом файле, когда я компилирую свою программу на C ++ из другой папки

Я работаю с библиотекой робототехники ARIA. У меня установлена ​​библиотека в /usr/local/Aria
Пока я поместил весь новый код, который я пишу, в папку в /usr/local/Aria/examples папку и скомпилировал ее с верхнего уровня /usr/local/Aria библиотека с использованием g ++. Это прекрасно работает, и я получаю работающий исполняемый файл. Но я хотел попробовать перенести мой проект в другую папку. Позвоните в эту папку ~/Documents/workspace/code

После долгих проб и ошибок я обнаружил, что единственный способ получить компиляцию без компилятора, показывающего какие-либо ошибки, — это перейти в /usr/local/Aria каталог и запустить

g++ -g -Wall -D_REENTRANT -fPIC -Iinclude -I~/Documents/workspace/robotcode/include ~/Documents/workspace/robotcode/robotCode.cpp -o ~/Documents/workspace/robotcode/robotCode -Llib -lAria -ldl -lrt

Этот код прекрасно компилирует код, но когда я запускаю исполняемый файл, сгенерированный, программа показывает

Aria: Received signal 'SIGSEGV'. Exiting

Итак, вот что меня смущает:
Я составил точно такой же код в двух каталогах. Единственная разница между двумя компиляциями заключалась в различном рабочем каталоге. Итак, я пришел к выводу, что segfault был из-за другого каталога.

У кого-нибудь есть идеи, почему это может произойти? Я все еще могу работать в каталоге / usr / local / Aria, но было бы удобно, если бы я мог поместить все мои файлы проекта в отдельную папку.

Я работаю в Ubuntu 12.04

0

Решение

Бежать ldd your_executable, Он покажет вам зависимости вашего исполняемого файла. Я подозреваю, что либо библиотеки связаны относительно вашего исполняемого файла, и вы перемещаете его без перемещения библиотек, либо связаны абсолютно, и вы перемещаете библиотеки вместе с исполняемым файлом.

Так что просто беги ldd your_executable из обоих мест и сравнить результаты, чтобы узнать.

0

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

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

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