0 / 0 / 0
Регистрация: 05.10.2022
Сообщений: 8
1

Embarcadero не линкует файлы "С"

12.12.2024, 11:08. Показов 1976. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день всем!
Запнулся на ровном месте
Создаю простейший проект с одной кнопкой и одной меткой для проверки ситуации:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "C_test_main.h"
#include "mytest.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
 
int GetInt()
{
    return(28);
}
 
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Label1->Caption = IntToStr(GetInt());
    Label1->Caption = IntToStr(Get28());
}
//---------------------------------------------------------------------------
И создаю пару внешних файлов :
"mytest.h"
C
1
2
3
4
5
6
#ifndef mytest_H
#define mytest_H
 
int Get28();
 
#endif
"mytest.c"

C
1
2
3
4
5
6
#include "mytest.h"
 
int Get28()
{
    return(28);
}
Компилятор все устраивает, а линкер выдает ошибку
[ld.lld Error] ld.lld: error: undefined symbol: Get28()

Подскажите, где я туплю?
0
12.12.2024, 11:08
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.12.2024, 11:08
Ответы с готовыми решениями:

Не линкует .c файлы к Qt-проекту на c++
Возникли проблемы с линковкой. Имеется проект на Qt (c++), к которому подрублены сишные файлы. Все хорошо компилится, но объектные файлы...

Embarcadero RAD Studio XE.Равные переменные типа real оказываются для Embarcadero не равными
Все переменные типа real.Вне зависимости от действительного равенства full становится false Например Код full:=true; ...

Где скачать файлы для установки DelphiX на Embarcadero RAD Studio XE8?
Где скачать файлы для установки DelphiX на Embarcadero RAD Studio XE8, и возможно ли это?

12
Модератор
 Аватар для D1973
9678 / 6281 / 2432
Регистрация: 21.01.2014
Сообщений: 26,753
Записей в блоге: 3
12.12.2024, 11:57 2
Добавьте свой файл в проект:
Главное меню Project => Add to Project... и укажите свой файл mytest.cpp

Добавлено через 1 минуту
Цитата Сообщение от andy-120 Посмотреть сообщение
Компилятор все устраивает
Странно. У меня вот ошибку кидает:
[ilink32 Error] Error: Unresolved external 'Get28()' referenced from D:\PRJ\DEFAULT\WIN32\DEBUG\UNIT1.OBJ
0
0 / 0 / 0
Регистрация: 05.10.2022
Сообщений: 8
12.12.2024, 12:06  [ТС] 3
Файл в проект добавлен. Если он "cpp", то все работает, но мне нужно именно "с".
0
Модератор
 Аватар для D1973
9678 / 6281 / 2432
Регистрация: 21.01.2014
Сообщений: 26,753
Записей в блоге: 3
12.12.2024, 12:13 4
Цитата Сообщение от andy-120 Посмотреть сообщение
но мне нужно именно "с".
Поменял расширение на "с" вместо "срр" и точно так же добавил в проект. Все распрекрасно работает.
Миниатюры
Embarcadero не линкует файлы "С"  
0
1614 / 1516 / 252
Регистрация: 19.02.2010
Сообщений: 4,094
12.12.2024, 12:19 5
andy-120, вот так в mytest.h объяви свою функцию:
C
1
extern "C" int Get28();
1
Модератор
 Аватар для D1973
9678 / 6281 / 2432
Регистрация: 21.01.2014
Сообщений: 26,753
Записей в блоге: 3
12.12.2024, 12:27 6
VTsaregorodtsev, если не включать файл в проект - будет та ошибка, как я выше указал.
А если включать - то и без extern "C" работает...
0
0 / 0 / 0
Регистрация: 05.10.2022
Сообщений: 8
12.12.2024, 13:02  [ТС] 7
Блин!!! Теперь и у меня компилятор ругается:

Где-то рядом туплю, а где не пойму.
Миниатюры
Embarcadero не линкует файлы "С"  
0
0 / 0 / 0
Регистрация: 05.10.2022
Сообщений: 8
12.12.2024, 13:07  [ТС] 8
А extern вообще не катит
Миниатюры
Embarcadero не линкует файлы "С"  
0
0 / 0 / 0
Регистрация: 05.10.2022
Сообщений: 8
12.12.2024, 13:18  [ТС] 9
D1973, У меня в итоге эта же ошибка и выходит.

[ilink32 Error] Error: Unresolved external 'Get28()' referenced from D:\PROJECTS\C-TEST\C_TEST_MAIN.OBJ

И не могу от нее избавиться.Файл в проект включен.
Что еще не так?

Добавлено через 2 минуты
VTsaregorodtsev, У меня "extern" не проходит, может какие-то настройки проекта не те? Я ничего не трогал, все по дефолту.
0
0 / 0 / 0
Регистрация: 05.10.2022
Сообщений: 8
12.12.2024, 13:23  [ТС] 10
"extern" без "C" проходить, но все то же
Миниатюры
Embarcadero не линкует файлы "С"  
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33068 / 21370 / 8210
Регистрация: 22.10.2011
Сообщений: 36,687
Записей в блоге: 9
12.12.2024, 14:16 11
andy-120, нельзя в C-файле использовать extern "C", это чисто плюсовая конструкция. Достаточно добавить строку:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "C_test_main.h"
 
extern "C" int Get28(void); // <--- Вот эту, ну, или вынести ее в hpp-файл, но не подключать к C-файлу этот инклюд
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
// ...
, и все соберется...
1
0 / 0 / 0
Регистрация: 05.10.2022
Сообщений: 8
13.12.2024, 05:47  [ТС] 12
volvo, Спасибо, все собралось. Только пришлось убрать #include "mytest.h"
Миниатюры
Embarcadero не линкует файлы "С"  
0
0 / 0 / 0
Регистрация: 05.10.2022
Сообщений: 8
13.12.2024, 05:48  [ТС] 13
Спасибо ВСЕМ!!!
0
13.12.2024, 05:48
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.12.2024, 05:48
Помогаю со студенческими работами здесь

ld не линкует math.h
Всем доброго времени суток! У меня такая проблема: если я использую в программе функции из math.h, то при линковки ld ругается: ...

qt 5.5 не линкует внешнюю .lib
В проект включена внешняя либа .lib, подключена в pro файле так: win32: LIBS += -L$$PWD/../UsnDeviceLibrary/ -lCyAPI INCLUDEPATH...

GNU криво линкует x86 PE
Есть следующий код: #include &lt;iostream&gt; char __attribute__ ((section (&quot;.TST&quot;))) buffer; int main(int argc, char* argv) { ...

Билдер компилирует(линкует) неизмененный код
Комментирую часть кода, но билдер все равно продолжает выполнять эту часть. То же самое с любыми изменениями в коде. Project-&gt;Option...

MASM32 компилирует и линкует без ошибок. но EXE не выполняется
Здравствуйте, я пытаюсь создать консольное приложение на ASM для windows. MASM32 откомпилировал и линковал мой ASM код без единой ошибки....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Микросервис с нуля на Go с Kafka
stackoverflow 12.02.2025
Когда я впервые столкнулся с необходимостью разделить монолитное приложение на микросервисы, передо мной встал вопрос выбора правильных технологий и подходов. После долгих экспериментов с различными. . .
Микросервис с нуля на C# с RabbitMQ
stackoverflow 12.02.2025
Переход от монолитной архитектуры к микросервисной - это не просто модное веяние, а закономерный этап эволюции программных систем. В отличие от монолита, где все компоненты тесно связаны между собой. . .
Docker для начинающих
stackoverflow 12.02.2025
В современном мире разработки программного обеспечения все чаще возникает необходимость быстро и надежно разворачивать приложения в различных средах. Разработчики постоянно сталкиваются с проблемой. . .
Создание бота для Телеграм на C#
stackoverflow 12.02.2025
В современном мире корпоративных коммуникаций Telegram-боты становятся незаменимым средством автоматизации бизнес-процессов и взаимодействия с сотрудниками. Как создать такого бота, который сможет. . .
Операторы сравнения (== и ===) в JavaScript
hw_wired 12.02.2025
JavaScript предоставляет два основных оператора сравнения - оператор нестрогого равенства (==) и оператор строгого равенства (===). На первый взгляд они могут показаться очень похожими, но их. . .
Определение адреса, откуда репозиторий Git был клонирован
hw_wired 12.02.2025
Система контроля версий Git хранит всю информацию о репозитории в специальной директории . git, включая данные об удаленных источниках. Эта информация необходима для синхронизации изменений между. . .
Объединение нескольких коммитов Git в один
hw_wired 12.02.2025
Представьте, что вы работаете над новой функциональностью и создали десяток небольших коммитов: исправление опечатки, форматирование кода, добавление комментариев, реализация основной логики. Каждый. . .
Как добавить локальную ветку в удалённый репозиторий Git
hw_wired 12.02.2025
Локальная ветка в Git - это изолированная линия разработки, существующая только на вашем компьютере. Представьте себе дерево с множеством веток - каждая ветка может расти в своем направлении, не. . .
Статическое отражение в C++
stackoverflow 12.02.2025
Статическое отражение представляет собой мощный механизм, позволяющий программам анализировать и манипулировать своей собственной структурой во время компиляции. Эта возможность открывает. . .
C++ в 21 веке - Бьярне Страуструп
stackoverflow 12.02.2025
В современном мире разработки программного обеспечения C++ продолжает оставаться одним из ключевых языков программирования, несмотря на свой солидный возраст - более 45 лет с момента создания. За это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru