2011-08-08 3 views
2

Я работаю над кодом, который использует Open Dynamics Engine. Я работал с этим кодом раньше в окнах, но теперь я перехожу к unix, поэтому я могу получить опыт работы с C в среде unix, и поэтому я не полагаюсь на визуальную студию. Я загрузил все в мой домашний каталог, построенный с помощью прилагаемого make-файла и попробовал демонстрацию; все хорошо. Я создал каталог и тестовый файл в своем собственном тесте. Для моего #include я указал:Почему моя директива include не работает в gcc?

#include ".././ode-0.11.1/include/ode/ode.h" 
#include ".././ode-0.11.1/include/drawstuff/drawstuff.h" 

Поскольку библиотека находится только в моем домашнем каталоге, а не в стандартном расположении. Я иду, чтобы скомпилировать мой код, но:

.././ode-0.11.1/include/ode/ode.h:28:27: fatal error: ode/odeconfig.h: No such 
file or directory 

Глядя на ode.h, она включает в себя множество других заголовков все находится в том же каталоге, но с использованием синтаксиса брекет вместо кавычек. Я предполагаю, что это имеет какое-то отношение к тому, почему gcc не может найти другие заголовки. Я посмотрел на make-файлы, но не знаю достаточно, чтобы выяснить, что такое моя проблема. Почему моя компиляция не работает? Подробный/подробный ответ был бы оценен, так как я хочу узнать, как все это работает (связывание, включение, создание и т. Д.).

Edit: Так что я понял, как включить все заголовки правильно, теперь мне нужно, чтобы выяснить, как связать с определениями библиотеки для функций ...

Edit2: До сих пор не могу понять, как ссылку на мой код. Скомпилированные статические библиотеки выгружаются в '~/ode-0.11.1/ode/src/.libs' и '~/ode-0.11.1/drawstuff/src/.libs' для функций рисования.

Edit3: Думаю, я понял это. Я не использовал параметр -l правильно, и кажется, что он должен идти ПОСЛЕ файлов, которые ссылаются на функции из библиотек, к которым я привязываюсь.

+0

Это может помочь увидеть ваш Makefile и в какой директории код s in - Обратите внимание, что ваш код не должен находиться ни в одной из каталогов ode. – Mark

+0

На данный момент я не использую собственный файл makefile, так как я просто компилирую 1 файл. Он находится в '~/code/myfile.cpp' – primehunter326

+0

SO, что создает файлы ~/ode-0.11.1/ode/src/.libs, если это файл make ode, тогда я подозреваю, что вы также должны сделать make install – Mark

ответ

7

Вам нужно, чтобы установить каталог включает в строке компиляции

например

gcc -I.././ode-0.11.1/include 

или лучше в этом Cas абсолютного пути

Затем в коде включает в себя как

#include "ode/ode.h" 
#include "drawstuff/drawstuff.h" 

Таким образом, все файлы, входящие в ode.h будет доступен из того же каталога. Ваш пример ode/odeconfig.h будет найден, поскольку ode является поддиалогом из пути include в параметре -I.

Ссылка аналогична, но обе части выполнены в командной строке. Две части - это файл, заданный переменной -l, и каталог, в котором находится lib по параметру -L. Также, если в библиотеке указано libode.dylib, вы просто нашли имя, например. ода.

Так командная строка

gcc -lode -L.././ode-0.11.1/lib 
+0

Да, мне удалось найти заголовки, используя «#include » и «#include » и указав путь, как вы описали, однако он все еще не может найти определения для функций , Скомпилированные файлы .lo 'все сбрасываются в' ~/ode-0.11.1/ode/src/', которые я пытался указать с помощью флага' -L ', но это не сработало. – primehunter326

+0

Ah объектные файлы - вам нужно указать полный путь для каждого файла - вы компилируете ode или программу с использованием библиотеки ode – Mark

+0

Да, я, мой код находится в отдельном каталоге. Но не могу ли я просто ссылаться на файлы * .a на пути, упомянутые в моем исходном сообщении (2-е редактирование)? – primehunter326

0

перейти в каталог ода-0.11.1 Это будет дом проекта.

Так включаемые файлы принадлежат директории ода-0.11.1/включить В этом случае ваш источник должен быть как

MyProg.с

#include "ode/ode.h" 
#include "drawstuff/drawstuff.h" 

команда компиляции должна быть строка, как:

gcc -I./include/ode -I./include/drawstuff myprog.c -o myprog 

команда, выполненная в каталоге ода-0.11.1/включить

+0

Это не сработает, поскольку у вас есть ode или drawstuff как в include, так и в пути -I, он может быть только одним, чтобы найти root, и должен быть таким, каким я могу дать, чтобы файлы в ode.h были включены , – Mark

Смежные вопросы