Я получаю сообщение об ошибке при попытке запустить программу после использования чистой инструкции - PullRequest
0 голосов
/ 30 декабря 2018

Мне нужно написать простую makefile программу, которая объединяет три файла: mymath.h mymath.c и calc.c, создать статическую и общую библиотеку, связать все и в конце удалить все ненужные файлы

Я уже закончил свою программу, но когда я пытаюсь запустить ./libshared я получаю ошибку

all: lib_dyn_run lib_stat_run clean

lib_dyn_run: calc.c lib_dyn.so
        gcc calc.c -o libshared -L. lib_dyn.so
lib_dyn.so: mymathdyn.o calcdyn.o
        gcc -shared -o lib_dyn.so mymathdyn.o calcdyn.o
mymathdyn.o: mymath.c
        gcc -fPIC -c mymath.c -o mymathdyn.o
calcdyn.o: calc.c
        gcc -fPIC -c calc.c -o calcdyn.o
lib_stat_run: calc.c lib_stat.a
        gcc -o libstatic calc.c -L. lib_stat.a
lib_stat.a: mymath.o calc.o
        ar rcs lib_stat.a mymath.o calc.o
mymath.o: mymath.c mymath.h
        gcc -c mymath.c
calc.o: calc.c mymath.h
        gcc -c calc.c
clean:
        rm -f all *.o *.a *.so *.gch

Когда я запускаю ./libstatic все в порядке и я получаю правильный результат

Когда язапустите ./libshared я получаю ошибку

ошибка при загрузке общих библиотек:?: не удается открыть файл общего объекта: нет такого файла или каталога

Я знаю, что проблема в.так что в «чистой» функции, но как этот необходимый файл, так как он работает так же, как lib_stat_run, который работает нормально. Я хочу удалить все файлы, кроме исходных файлов и двух .exe файлов

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

исполняемый файл, созданный с помощью static, содержит необходимые библиотечные функции внутри себя, поэтому ему не нужны внешние библиотеки.

Однако динамический исполняемый файл НЕ содержит функций из внешних (* .so)библиотеки, только прототипы, поэтому внешние библиотеки могут быть видны во время выполнения.

0 голосов
/ 30 декабря 2018

Ваша команда clean настроена на удаление *.so, которые являются файлами общих объектов, от которых зависит ваш libshared.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...