Хобрук: Ваш путь к мастерству в программировании

Ошибка при загрузке разделяемых библиотек: liblua.so

Я пытаюсь запустить клиент для школьного проекта с ИИ, разработанным на Lua, я добавил liblua.so в папку /lib/ в корне папки моей программы.

После компиляции и запуска указанной программы я получаю следующую ошибку:

./zappy_ai: ошибка при загрузке общих библиотек: liblua.so: невозможно открыть общий объектный файл: нет такого файла или каталога

Насколько я понимаю, я должен что-то сделать при компиляции, чтобы моя программа знала, где находится моя общая библиотека.

Вот соответствующая часть моего Makefile:

CXX             =       g++

BASE_FLAGS      =       -Wall -Wextra -Iincludes

AI_NAME         =       zappy_ai

AI_PATH         =       ./sources/client/

AI_FLAGS        =       $(BASE_FLAGS)                   \
                        -L./lib/                        \
                        -I./includes/client/            \
                        -I./include/                    \
                        -std=c++11                      \

AI_LDFLAGS      =       -llua

AI_SRCS         =       main.cpp                        \
                        Client.cpp                      \
                        Params/Params.cpp               \
                        Params/Option.cpp               \
                        SocketTCP.cpp                   \
                        Misc/Error.cpp

AI_OBJS         =       $(addprefix $(AI_PATH), $(AI_SRCS:.cpp=.cpp.o))

%.cpp.o         :       %.cpp
                        @printf "%b[Compilation]%b %-50s" $(BLUE) $(RESET) $<
                        @$(CXX) $(FLAGS) -c $< -o $@
                        @printf "%bOK%b\n" $(GREEN) $(RESET)

$(AI_NAME)      :       FLAGS = $(AI_FLAGS)
$(AI_NAME)      :       $(AI_OBJS)
                        @$(CXX) $^ -o $@ $(AI_LDFLAGS)
                        @printf "%b[Message]%b AI compilation done\n\n" $(YELLOW) $(RESET)

Что я должен добавить, чтобы иметь возможность запускать мою программу и находить мою общую библиотеку?


  • Вам может понадобиться запустить ldconfig или добавить /usr/local/lib в /etc/ld.so.conf, если вы скомпилировали lua из исходного кода. 23.06.2016

Ответы:


1

тлдр:

$ LD_LIBRARY_PATH="$LD_LIBRARY_PATH:./lib" ./zappy_ai

Более длинное объяснение:

Вы динамически связали

zappy_ai

против

./lib/liblua.so

используя

LDFLAGS = -L./lib/

а также

LDLIBS = -llua

Полученный исполняемый файл zappy_ai требует, чтобы тот же самый ./lib/ присутствовал в переменной среды LD_LIBRARY_PATH, когда динамический компоновщик/загрузчик пытается разрешить символы -llua, используемые zappy_ai.

23.06.2016
Новые материалы

100 дней кода машинного обучения — День 097
Подведение итогов дня 096 В дни 095 и 096 мы говорили о том, как мы слышим звук в пространстве: время интерауральной задержки, передаточная функция, связанная с головой, а также мы говорили..

Какова ваша «история данных»?
Представление концепций продуктов для данных и машинного обучения заинтересованным сторонам и руководству Все любят данные. Все любят говорить, как будто понимают данные. Всем нравится..

Все, что вам нужно знать о «Внимании» и «Трансформерах» — Углубленное понимание — Часть 2
Внимание, Самостоятельное внимание, Многоголовое внимание, Маскированное многоголовое внимание, Трансформаторы, BERT и GPT В предыдущем рассказе я объяснил, что такое механизм внимания, а также..

Расставание с локальным хранилищем
Что такое локальное хранилище Локальное хранилище — это механизм, который позволяет веб-приложениям хранить данные на стороне клиента. Это часть API веб-хранилища, которое также включает в себя..

CycleGAN: как машинное обучение обучает непарному преобразованию изображения в изображение
Недавно я прочитал статью CycleGAN ( ссылка ), которая показалась мне очень интересной, потому что модели CycleGAN обладают невероятной способностью точно преобразовывать изображения во что-то, чем..

«Изучение передовых технологий: подробный обзор последних инноваций в области технологий…
Технологии постоянно развиваются, и последние инновации в технологической отрасли могут изменить наш образ жизни и работы так, как мы никогда не считали возможным. В этой статье подробно..

Позволяя машинам думать самостоятельно
Позволяя машинам думать самостоятельно Чтобы создать «сильный ИИ», нам не нужно смотреть дальше когнитивных процессов человеческого мозга. Мы увидим, что процессы, включающие ожидание,..