#c #codeblocks
#c #codeblocks
Вопрос:
Я пытаюсь скомпилировать программу с несколькими исходными файлами — двумя CPP-файлами и файлом заголовка, с code::blocks. В качестве примера я создал следующие три файла (пример программы, созданной кем-то другим на другом форуме):
main.cpp:
#include <stdio.h>
#include "other.h"
int main (void)
{
printf("%dn", getfavoritenumber());
return 0;
}
other.cpp
#include "other.h"
int getfavoritenumber(void)
{
return 3;
}
other.h
#ifndef _OTHER_H_
#define _OTHER_H_
int getfavoritenumber(void);
#endif
Несмотря на то, что эти три файла должны ссылаться друг на друга, я получаю сообщение об ошибке «Этап компоновки пропущен (цель сборки не имеет объектных файлов для ссылки)», когда я пытаюсь собрать проект.
Что я делаю не так? Попытка скомпилировать отдельные файлы выдает ошибку «Этот файл не назначен ни одному целевому объекту».
Комментарии:
1. Какой тип проекта вы выбрали? Вы должны выбрать «консольное приложение».
Ответ №1:
Вот что сработало у меня:
Перейдите на левую панель с надписью projects и щелкните правой кнопкой мыши на файле .cpp. Выберите свойства, затем перейдите к сборке. Установите флажки под заголовком Принадлежит целям: «Debug» и «Release»
Ответ №2:
У меня была похожая проблема при создании моего первого проекта с несколькими исходными кодами. я полагаю, что проблема, с которой вы столкнулись, связана не со связыванием, а с вашим оператором #include для меня каталог отличался от того, что я ожидал. чтобы включить файл заголовка в проект, который мне пришлось написать #include "include/other.h"
посмотрите, как устроена ваша система папок …. если бы вы могли опубликовать, какие папки / каталоги у вас есть в проекте, я мог бы дать вам лучший ответ.
Ответ №3:
У меня была похожая проблема, и я обнаружил, что если я просто закрыл проект, создал новое пустое консольное приложение, а затем импортировал существующие файлы, все начинало нормально компилироваться.
Комментарии:
1. Разве это не заставляет вас чувствовать, что Code:: blocks — это кусок дерьма?
Ответ №4:
Я сделал это:
-
Я создал консольный проект в Code::Blocks
-
Для каждого файла я
File|New
создал пустой файл, добавил его в проект с указанными вами именами и вставил соответствующий код из вашего вопроса в каждый файл. -
Скомпилировал и запустил результирующий исполняемый файл.
Все сработало так, как ожидалось. Если у вас это не работает, пожалуйста, опишите, как вы создаете проект. Code::Blocks абсолютно необходим проект — он плохо работает с отдельными файлами. Если вы хотите этого, используйте GCC из командной строки.
Редактировать:
-
Обычно хорошей идеей является установка компилятора отдельно от CB, который на самом деле является всего лишь IDE. Я предполагаю, что здесь мы находимся на Windows. Перейдите к http://tdm-gcc.tdragon .подключитесь к Сети и загрузите оттуда последнюю версию компилятора GCC. Проверьте, что это работает из командной строки.
-
Затем в CB перейдите на
Settings|Compiler and Debugger
и выберитеToolchains executables
вкладку. Затем перейдите в корень каталога, где вы установили содержимое TDM GCC (корневой, а не каталог bin в корневом каталоге), и все должно быть хорошо.
И если в конце дня это не сработает, попробуйте форумы поддержки CB по адресуhttp://forums.codeblocks.org .
Комментарии:
1. Я создаю проект точно так, как описано. Я также пробовал предложение jonsca использовать тип проекта «Консольное приложение». Я использую компилятор по умолчанию — GNU GCC compiler. Возможно, проблема в этом — есть несколько компиляторов на выбор. Как мне узнать, правильно ли они установлены? (Я предполагаю, что компилятор по умолчанию включен в установку code::blocks — я скачал программу всего несколько дней назад и выбрал тот, который поставляется с компилятором MingGW — но этого компилятора нет в списке. Я подозреваю, что моя проблема может заключаться здесь?
Ответ №5:
Убедитесь, что все файлы (.h и .cpp) были добавлены в проект с помощью Project>Add Files… или Project> Добавить файлы рекурсивно…
Комментарии:
1. Как бы то ни было, это решение Code::Blocks.
2. @theJollySin вау, я написал этот ответ, когда был новичком и все еще использовал Code ::Blocks вместо Makefile, как обычный человек.
Ответ №6:
У меня была та же проблема, вы переносите готовые программы в консольное приложение в соответствии с инструкциями, но затем вы все равно получаете сообщение об ошибке. Что сработало для меня: основные сценарии, совместно используемые программами, должны быть переписаны (выделите их пробелом и выберите из меню, которое появляется при вводе первых нескольких символов), это почти как если бы вручную указать и вызвать Code::block, обращая внимание на их общее родство. лол.