C++: проблемы со связью из командной строки

Только начинаю с C++ здесь. Я работаю над OSX с Eclipse CDT. У меня есть проект с некоторыми пользовательскими классами и двумя файлами «Test.hpp» и «Test.cpp» — последний с моим методом main(), который запускает некоторые тесты, которые я определил и реализовал в этих двух файлах.

Я могу компилировать и запускать из Eclipse без проблем, но когда я пытаюсь скомпилировать из командной строки с помощью «g++ Test.cpp», я получаю много ошибок компоновки, которые в основном перечисляют все методы, определенные в Test.cpp или на которые есть ссылки из Test.cpp, как неопределенные символы.

Я скомпилировал несколько базовых программ (один заголовочный файл и один файл реализации) аналогичным образом из командной строки без каких-либо проблем, но я не могу понять, почему эта не работает. Пожалуйста помоги!

EDIT: Из моей формулировки неясно, но да, у меня есть и другие исходные файлы. Принятый ответ помог: «g++ Test.cpp Other1.cpp Other2.cpp». Спасибо.


person Imran    schedule 07.03.2010    source источник
comment
покажи нам командную строку   -  person John Knoeller    schedule 07.03.2010
comment
Может быть, показать код. Является ли test.cpp единственной единицей перевода, которая содержит все необходимые определения функций? Вы написали список всех модов, определенных или упомянутых в Test.cpp. Итак, Test.cpp использует функции, определенные вне Test.cpp? Это ваша проблема прямо там.   -  person sellibitze    schedule 07.03.2010
comment
Извините, что не публикую вывод. Я подумал, что резюмировал это, сказав, что я вызвал g++ Test.cpp и только что получил список всех методов в моем проекте под неопределенными символами. «Исправлено, и я надеюсь, что этого достаточно, чтобы помочь кому-то еще с той же ошибкой.   -  person Imran    schedule 07.03.2010


Ответы (3)


Команда «g++ Test.cpp» выполняет как компиляцию, так и компоновку. Если у вас много исходных файлов, вы также должны связать с ними Test.cpp, например «g++ Test.cpp other1.cpp other2.cpp», или просто скомпилировать все файлы и связать их все вместе позже, например «g++ Test.o other1.o other2». .о'.

person Corwin    schedule 07.03.2010
comment
Спасибо, это то, что мне нужно было сделать! - person Imran; 07.03.2010

Где находятся ваши файлы? Ваш файл .h находится в том же каталоге, что и ваш файл .cpp? Если нет: пробовали ли вы использовать опцию -I из gcc? Если да: ваш рабочий каталог находится в том же каталоге, что и ваши исходные файлы?

person Markus Pilman    schedule 07.03.2010

Если вы вызываете G++ таким образом, он не только компилирует код, но и пытается связать результаты в исполняемый файл. Если ваш test.cpp требует некоторых функций, которые вы определили где-то еще, это объясняет ваши наблюдения. Компиляция без компоновки может быть достигнута путем добавления ключа -c. В качестве альтернативы вы можете вызвать g++ со всеми необходимыми файлами cpp.

person sellibitze    schedule 07.03.2010