Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: ImranОтветов: 3

Только начинаю с 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". Спасибо.

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

c++linker

Ответы

Ответ 1 · рейтинг 5 · Corwin

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

Ответ 2 · Markus Pilman

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

Ответ 3 · sellibitze

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы