2013-07-09 3 views
0

Я запускаю свои программы в Ubuntu, используя имена библиотек cpt. Я включаю необходимые файлы заголовков из библиотеки, но программа не работает, потому что она не может получить доступ к функциям в файле заголовка. (он показывает, что ошибка) Я должен также включить файлы .cpp, который содержит полное определение функции. Теперь я запускаю свои программы, также включая файлы .cpp, связанные с необходимыми заголовками. Почему я получаю эту ошибку, несмотря на то, что у меня есть -I/Desktop/cpt во время компиляции?Включение только файлов заголовков не запускает программу

+0

Я понятия не имею, что вы пытаетесь сказать. Есть много шагов между тем, что файлы заголовков и программы не работают. – Wug

+0

Я только что отредактировал его для лучшего объяснения. – cleanplay

+0

Вы включаете заголовки для библиотек, но не связываетесь с библиотеками? Вы получаете ошибки компоновщика «определение функции не найдено»? –

ответ

0

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

+0

В моей программе я включил заголовок «linalg.hpp», а во время компиляции я использовал «g ++ lin.cpp -o linex -I/Desktop/cpt», где cpt - это папка, где находится linalg.cpp. Как скомпилировать все .cpp-файлы, которые необходимы моей программе за одно исполнение? – cleanplay

+0

Вам нужен make-файл, make-файл состоит из всех команд, которые вы предоставили бы вашему компилятору (например, g ++). Когда вы создаете make-файл, вы можете скомпилировать свой код, просто набрав «make» в консоли. У вас также есть возможность сказать компилятору компилировать все .cpp-файлы в каталоге с помощью команды подстановки, например, для компиляции всех файлов .cpp в исходном каталоге, который вы бы набрали: $ (wildcard source/*. Cpp), ваш Makefile может выглядеть следующим образом: SRC = $ (. подстановочные источник/* CPP) LIB = -some_Lib_that_you_need всего: \t г ++ $ (SRC) -о outputName $ (LIB) – vladimirm

0

Возможно, вам следует связать свою программу с соответствующей общей/статической библиотекой, которая обеспечивает реализацию этих функций, объявленных в файле заголовка?

+0

что это значит 'программа ссылку' - Вы хотите упомянуть путь Include во время компиляции или что-то еще? Я уже включаю путь к файлам .cpp, связанным с файлами заголовков, содержащими нужные мне функции. – cleanplay

+0

Я имею в виду, что, возможно, файлы .cpp ares должны быть уже скомпилированы и предоставлены вам как библиотека, которую вы должны связать с вашим кодом при создании окончательного исполняемого файла. Это ваш случай? –

0

Vladimirm правильный, вам не нужно # включать файлы .cpp. файлы заголовков должны компилироваться с или без связанных с ними файлов .cpp. Все файлы .cpp связаны друг с другом в процессе, известном как связывание, но файлы заголовков предоставляют прототипы для функций во время связывания.

Вы используете угловые скобки вокруг своего #include? например

#include <mylib.h> 

Если это так, вы можете рассмотреть возможность переключения на двойные кавычки, например.

#include "mylib.h" 

В зависимости от того, где находятся исходные файлы, на которые вы ссылаетесь, это может быть проблемой.

+0

Я использую "filename.h". Мои файлы заголовков и связанные с ними файлы .cpp находятся в том же каталоге, в котором я запускаю свою программу. Также во время компиляции я упоминаю путь include. Тем не менее программа не вызывает функции в файле заголовка. Я должен включить.cpp, и только тогда программа вызывает требуемые функции в файле заголовка. Это то, что я хочу знать, почему? – cleanplay

+0

О, так это на самом деле работает, когда вы #include .cpp-файлы? –

+0

Да, он работает тогда – cleanplay

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