Я работаю с библиотекой робототехники 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
Бежать ldd your_executable
, Он покажет вам зависимости вашего исполняемого файла. Я подозреваю, что либо библиотеки связаны относительно вашего исполняемого файла, и вы перемещаете его без перемещения библиотек, либо связаны абсолютно, и вы перемещаете библиотеки вместе с исполняемым файлом.
Так что просто беги ldd your_executable
из обоих мест и сравнить результаты, чтобы узнать.
Других решений пока нет …