0 / 0 / 0
Регистрация: 23.09.2023
Сообщений: 2

Ошибка: неопределённая ссылка на функцию (gcc, cmake)

23.09.2023, 06:53. Показов 1558. Ответов 2

Студворк — интернет-сервис помощи студентам
На начальном локальном репозитории всё нормально работало. На гитхабе сборка упала. При клонировании репозитория в другую папку сначала происходит дамп памяти, когда редактирую код возникают ошибки "неопределённая ссылка на функцию", иногда когда редактирую начинает работать нормально, но после загрузки в гитхаб всё начинается заново. Файлы зависимостей почти одинаковые, даже после изменения их вручную ничего не меняется. Репозиторий:https://github.com/MGsand/Beta-kurs
Ошибка сразу после клонирования:
Code
1
2
3
4
5
6
7
8
$ make 
Makefile:63: предупреждение: переопределение способа для цели «run»
Makefile:17: предупреждение: старый способ для цели «run» игнорируются
./bin/format
Enter filename
a.txt
Open file
make: *** [Makefile:63: run] Исключение в операции с плавающей точкой (сделан дамп памяти)
Ошибка тест:
Code
1
2
3
4
5
6
7
8
9
10
11
$ make test
Makefile:63: предупреждение: переопределение способа для цели «run»
Makefile:17: предупреждение: старый способ для цели «run» игнорируются
gcc -I thirdparty -I src/lib -MMD -c -o obj/ctests/test_1.o ctests/test_1.c
gcc -I thirdparty -I src/lib -MMD -c -o obj/ctests/main.o ctests/main.c
gcc -I thirdparty -I src/lib -MMD -o bin/main_test obj/ctests/test_1.o obj/ctests/main.o obj/src/lib/lib.a
/usr/bin/ld: obj/ctests/test_1.o: в функции «ctest_functions_noformat_test_run»:
test_1.c:(.text+0x754): неопределённая ссылка на «noformat»
/usr/bin/ld: test_1.c:(.text+0x7ec): неопределённая ссылка на «noformat»
collect2: error: ld returned 1 exit status
make: *** [Makefile:54: bin/main_test] Ошибка 1
Ошибка изменение:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ make
Makefile:63: предупреждение: переопределение способа для цели «run»
Makefile:17: предупреждение: старый способ для цели «run» игнорируются
gcc -I src/lib -o bin/format obj/src/format/kursovikkk.o obj/src/lib/lib.a
/usr/bin/ld: obj/src/format/kursovikkk.o: в функции «main»:
kursovikkk.c:(.text+0x12): неопределённая ссылка на «Cleanabz»
/usr/bin/ld: kursovikkk.c:(.text+0x2a): неопределённая ссылка на «selectfail»
/usr/bin/ld: kursovikkk.c:(.text+0x34): неопределённая ссылка на «nof»
/usr/bin/ld: kursovikkk.c:(.text+0x3e): неопределённая ссылка на «save»
/usr/bin/ld: kursovikkk.c:(.text+0x113): неопределённая ссылка на «selectfail»
/usr/bin/ld: kursovikkk.c:(.text+0x11f): неопределённая ссылка на «Clean»
/usr/bin/ld: kursovikkk.c:(.text+0x12b): неопределённая ссылка на «strlong»
/usr/bin/ld: kursovikkk.c:(.text+0x138): неопределённая ссылка на «fo»
/usr/bin/ld: kursovikkk.c:(.text+0x144): неопределённая ссылка на «Cleanabz»
/usr/bin/ld: kursovikkk.c:(.text+0x14e): неопределённая ссылка на «fo»
/usr/bin/ld: kursovikkk.c:(.text+0x15a): неопределённая ссылка на «fo»
/usr/bin/ld: kursovikkk.c:(.text+0x166): неопределённая ссылка на «paragraph»
collect2: error: ld returned 1 exit status
make: *** [Makefile:40: bin/format] Ошибка 1
Мейкфайл:
Code
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
APP_NAME = format
LIB_NAME = lib
TEST_NAME = main_test
 
TESTFLAGS = -I thirdparty
CFLAGS = -I src/lib
DEPSFLAGS = -MMD
CC = gcc
 
BIN_DIR = bin
OBJ_DIR = obj
SRC_DIR = src
TEST_DIR = ctests
 
# RUN
run: all
    $(APP_PATH) $(BIN_DIR)
 
APP_PATH = $(BIN_DIR)/$(APP_NAME)
LIB_PATH = $(OBJ_DIR)/$(SRC_DIR)/$(LIB_NAME)/$(LIB_NAME).a
TEST_PATH = $(BIN_DIR)/$(TEST_NAME)
 
APP_SOURCES = $(wildcard $(SRC_DIR)/$(APP_NAME)/*.c)
APP_OBJECTS = $(patsubst %.c, $(OBJ_DIR)/%.o, $(APP_SOURCES))
 
LIB_SOURCES = $(wildcard $(SRC_DIR)/$(LIB_NAME)/*.c)
LIB_OBJECTS = $(patsubst %.c, $(OBJ_DIR)/%.o, $(LIB_SOURCES))
 
TEST_SOURCES = $(wildcard $(TEST_DIR)/*.c)
TEST_OBJECTS = $(patsubst %.c, $(OBJ_DIR)/%.o, $(TEST_SOURCES))
 
DEPS = $(APP_OBJECTS:.o=.d) $(LIB_OBJECTS:.o=.d)
 
all: $(APP_PATH)
 
-include $(DEPS)
 
# BUILD
$(APP_PATH): $(APP_OBJECTS) $(LIB_PATH)
    $(CC) $(CFLAGS) -o $@ $^ 
 
$(LIB_PATH): $(LIB_OBJECTS)
    ar rcs $@ $^
 
$(OBJ_DIR)/%.o: %.c
    $(CC) $(CFLAGS) $(DEPSFLAGS) -c -o $@ $< 
 
 
# TEST
test: $(LIB_PATH) $(TEST_PATH)
    $(TEST_PATH)
 
$(TEST_PATH): $(TEST_OBJECTS) $(LIB_PATH)
    $(CC) $(TESTFLAGS) $(CFLAGS) $(DEPSFLAGS) -o $@ $^ 
 
$(OBJ_DIR)/ctests/main.o: ctests/main.c
    $(CC) $(TESTFLAGS) $(CFLAGS) $(DEPSFLAGS) -c -o $@ $<
 
$(OBJ_DIR)/ctests/test_1.o: ctests/test_1.c
    $(CC) $(TESTFLAGS) $(CFLAGS) $(DEPSFLAGS) -c -o $@ $<
 
run: $(APP_PATH)
    ./bin/format
 
 
# CLEAN
clean:
    $(RM) $(APP_PATH) $(TEST_PATH) $(OBJ_DIR)/*/*/*.[aod] $(OBJ_DIR)/test/*.[aod]
Майн:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "functions.h" 
#include <string.h>
 
int main()
{
    Cleanabz();
    char c;
    int ds = 40;
    int e = 0;
    selectfail();
    nof();
    save();
    while (1) {
        system("clear");
        puts("  ");
        puts("  ** Formatter **");
        puts("  ");
        puts("  1 - Select file");
        puts("  2 - Clean all file");
        puts("  3 - Change string length ");
        puts("  4 - No format");
        puts("  5 - Format ");
        puts("  6 - Paragraph ");
        puts("  0 - Exit");
        puts("  ");
 
        c = getchar();
        switch (c) {
        case '1':
            selectfail();
            break;
        case '2':
            Clean();
            break;
        case '3':
            ds = strlong();
            fo();
            break;
        case '4':
            Cleanabz();
            fo();
            break;
        case '5':
            fo();
            break;
        case '6':
            paragraph();
            break;
        case '0':
            e = ds;
            ds = e;
            return 0;
        }
    }
 
    getchar();
 
    return 0;
}
Файл с функциями:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "functions.h" 
#include <string.h>
 
int main()
{
    Cleanabz();
    char c;
    int ds = 40;
    int e = 0;
    selectfail();
    nof();
    save();
    while (1) {
        system("clear");
        puts("  ");
        puts("  ** Formatter **");
        puts("  ");
        puts("  1 - Select file");
        puts("  2 - Clean all file");
        puts("  3 - Change string length ");
        puts("  4 - No format");
        puts("  5 - Format ");
        puts("  6 - Paragraph ");
        puts("  0 - Exit");
        puts("  ");
 
        c = getchar();
        switch (c) {
        case '1':
            selectfail();
            break;
        case '2':
            Clean();
            break;
        case '3':
            ds = strlong();
            fo();
            break;
        case '4':
            Cleanabz();
            fo();
            break;
        case '5':
            fo();
            break;
        case '6':
            paragraph();
            break;
        case '0':
            e = ds;
            ds = e;
            return 0;
        }
    }
 
    getchar();
 
    return 0;
}
Заголовочный файл:
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
30
31
32
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
#define _CRT_SECURE_NO_WARNINGS
 
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void format(char fname[255], int ds);
 
void noformat(char fname[255]);
 
void paragraph();
 
void selectfail();
 
void Clean();
 
void Cleanabz();
 
void save();
 
void printsave();
 
int strlong();
 
void nof();
 
void fo();
 
#endif
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.09.2023, 06:53
Ответы с готовыми решениями:

Неопределённая ссылка на функцию
Если кратко, когда пытаюсь построить cmake-проект, то получаю следующее сообщение об ошибке: CMakeFiles/first_task.dir/main.cpp.o: in...

Неопределённая ссылка на функцию
Доброго времени суток! Имеется несколько файлов кода: main.cpp #include &quot;functions.h&quot; // Подключение файла с...

Неопределенная ссылка на функцию
Здравствуйте, есть код в котором подключен класс. Столкнулся с такой проблемой: при компиляции (компиляция происходит в терминале VSCode)...

2
фрилансер
 Аватар для Алексей1153
6391 / 5547 / 1118
Регистрация: 11.10.2019
Сообщений: 14,763
23.09.2023, 08:27
Цитата Сообщение от kibercotletka Посмотреть сообщение
Майн:
Цитата Сообщение от kibercotletka Посмотреть сообщение
Файл с функциями:
так содержимое этих файлов одинаковое, тут два мейна (UB) , а функции действительно не определены
0
0 / 0 / 0
Регистрация: 23.09.2023
Сообщений: 2
23.09.2023, 10:53  [ТС]
извиняюсь, содержимое файла с функциями:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
#include "functions.h"
#include <string.h>
 
FILE* f;
 
int ds = 40;
int nstr = 0;
 
int r;
int n = 10, ij = 0;
char chaa;
char fname[255];
 
char cs[15];
int spper = 1;
int flag = 0;
int abz = -1;
int flp = 1;
int ksim;
char* p;
char abzz[2000];
 
void format(char fname[255], int ds)
{
    f = fopen(fname, "r");
    char cha;
    char pred;
    int k = 0, ks = 1;
    int stran = 1, ki = 0;
    if ((abz >= 0) && (abz <= ks))
        k += 3;
 
    do {
        cha = fgetc(f);
        k++;
        if ((k % ds) == 0)
            ks++;
    } while (cha != EOF);
    nstr = ks;
    ksim = k;
    rewind(f);
    printf("ds %d\n", ds);
    char mt[ks][ds];
    for (int i = 0; i < ks; i++) {
        for (int j = 0; j < ds; j++) {
            if (((i == abz) || (abzz[i] == 1))
                && (j == 0 || j == 1 || j == 2)) {
                cha = ' ';
                mt[i][j] = cha;
            } else {
                mt[i][j] = fgetc(f);
                cha = mt[i][j];
                while (cha == '\n') {
                    mt[i][j] = fgetc(f);
                    cha = mt[i][j];
                }
                while (pred == cha && cha == ' ') {
                    mt[i][j] = fgetc(f);
                    cha = mt[i][j];
                }
                pred = cha;
            }
        }
    }
    fclose(f);
 
    f = fopen(fname, "w");
    fclose(f);
 
    f = fopen(fname, "r+");
    for (int i = 0; i < ks; i++) {
        ki++;
        for (int j = 0; j < ds; j++) {
            cha = mt[i][j];
            if (cha == EOF)
                continue;
            else
                fwrite(&cha, sizeof cha, 1, f);
        }
        fputs("\n", f);
        if (ki == 40) {
            fprintf(f, "\n         %d", stran);
            fputs("\n", f);
            stran++;
            ki = 0;
        }
        abz = -1;
    }
    if (ki != 0) {
        fputs("\n", f);
        fprintf(f, "         %d", stran);
    }
 
    fclose(f);
}
 
void noformat(char fname[255])
{
    f = fopen(fname, "r");
    char cha;
    char pred;
    int k = 0, ks = 1;
 
    do {
        cha = fgetc(f);
        k++;
        if ((k % ds) == 0)
            ks++;
    } while (cha != EOF);
    nstr = ks;
    ksim = k;
    rewind(f);
    char mt[ks][ds];
    for (int i = 0; i < ks; i++) {
        for (int j = 0; j < ds; j++) {
            mt[i][j] = fgetc(f);
            cha = mt[i][j];
            while (cha == '\n') {
                mt[i][j] = fgetc(f);
                cha = mt[i][j];
            }
            while (pred == cha && cha == ' ') {
                mt[i][j] = fgetc(f);
                cha = mt[i][j];
            }
            pred = cha;
        }
    }
    fclose(f);
 
    f = fopen(fname, "w");
    fclose(f);
 
    f = fopen(fname, "r+");
    for (int i = 0; i < ks; i++) {
        for (int j = 0; j < ds; j++) {
            cha = mt[i][j];
            if (cha == EOF)
                continue;
            else
                fwrite(&cha, sizeof cha, 1, f);
        }
    }
    fclose(f);
}
 
void paragraph()
{
    int oi;
 
    puts("enter the line");
    scanf("%d", &oi);
    if (oi > 0 && oi <= nstr) {
        abz = oi - 1;
        abzz[abz] = 1;
        fo();
        flp = 0;
    } else {
        puts(" Error ");
    }
}
 
void Clean()
{
    f = fopen(fname, "w");
    fclose(f);
}
 
int strlong()
{
    int dst;
    puts(" Enter new string length \n  ");
    scanf("%d", &dst);
    if (dst > 0 && dst < 100) {
        ds = dst;
        fo();
    } else {
        puts(" Error ");
    }
    return dst;
}
 
void Cleanabz()
{
    for (int i = 0; i < 2000; i++) {
        abzz[i] = 0;
    }
}
 
void save()
{
    f = fopen(fname, "r");
    p = (char*)malloc(ksim * sizeof(char));
    int y = 0;
    for (int i = 0; i < ksim; i++) {
        p[i] = fgetc(f);
        chaa = p[i];
    }
    if (chaa == ' ')
        y++;
    fclose(f);
}
 
void printsave()
{
    f = fopen(fname, "w");
    fclose(f);
 
    f = fopen(fname, "r+");
    for (int i = 0; i < ksim; i++) {
        chaa = p[i];
 
        fwrite(&chaa, sizeof chaa, 1, f);
    }
    fclose(f);
}
 
void selectfail()
{
    printf(" Enter filename \n");
    scanf("%s", fname);
    while ((f = fopen(fname, "r")) == NULL) {
        printf("Error open, file not faund \n ");
        printf(" Enter filename \n");
        scanf("%s", fname);
    }
    printf("Open file \n");
}
 
void nof()
{
    noformat(fname);
}
 
void fo()
{
    printsave();
    format(fname, ds);
}
 Комментарий модератора 
Используйте тэг кода С++.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.09.2023, 10:53
Помогаю со студенческими работами здесь

Ошибка ld, неопределённая ссылка
Есть следующий код: #include &lt;iostream&gt; class Human { private: std::string name; char sex;

Ошибка "неопределенная ссылка" при работе с std::thread
При попытке сделать что-либо с std::thread, выдает ошибку компиляции, &quot;неопределенная ссылка &quot; . К примеру: #include...

Archlinux cmake gcc
Как заставить работать cmake и gcc при компилировании c ++ проекта. Так как пакета g++ в репозиториях нету.

Неопределённая ссылка
Здравствуйте! Сегодня решил я написать проект на OpenGL под Linux. Установил glut, компилятор gcc, написал код, компилирую так: g++ -lm -o...

Неопределенная ссылка
Всем привет :) Столкнулся с такой проблемой : Написал класс Contact и попробовал использовать один из его методов, но при сборке через...


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

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

Новые блоги и статьи
EmBitz, создание проекта, отладка, прошивка
locm 15.07.2025
Создание проекта для Blue Pill (STM32F103C8T6) в EmBitz 2. 30, написания кода blink, запуск отладки в ОЗУ, заливка релизной прошивки во flash используя ST-Link и др. . . .
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru