У меня есть код C ++ на платформе openSuse, который мне нужно скомпилировать для выполнения на другой цели, основанной на linux. Часть кода - это динамическая c библиотека libfoo.so
. Я компилирую все с помощью make
, а затем копирую скомпилированный исполняемый файл prog
вместе с libfoo.so
в цель. Когда я затем запускаю исполняемый файл, я получаю несколько ошибок, указывающих, что libfoo не может быть инициализирован. Я пробовал все, что мог найти, чтобы указать исполняемому файлу, где он может найти libfoo.so
, но все равно получаю сообщение об ошибке.
Может ли кто-нибудь сказать мне, что я здесь делаю не так? Я чувствую, что это может быть ошибка в Makefile.
Я новичок в C ++ и использую Makefile в целом, и в довершение ко всему, цель работает как проприетарный linux версия, поэтому я не могу предоставить о ней много информации. Тем не менее, у меня есть соответствующий компилятор.
Моя структура каталогов на платформе openSuse:
|src
|--Foolib
|----foolib.h
|----libfoo.so
|--Otherlib
|----otherlib.h
|----otherlib.hpp
|---+OtherlibSrcDirectory
|--bar.cpp
|--bar.h
|--Makefile
Структура каталогов на цели:
|program
|--libfoo.so
|--prog
Мой Makefile :
LIBS = -LFoolib -lfoo
INC = -I OtherLib -I Foolib
CXXFLAGS += -lpthread -std=c++11 -D_GLIBCXX_USE_NANOSLEEP $(INC)
LDFLAGS = '-Wl,-rpath,$$ORIGIN'
SRC_FILES = bar.cpp
OBJ = $(SRC_FILES:%.cpp=%.o)
prog: $(OBJ)
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(LIBS) -o $@ $^
%.o: %.cpp
$(CXX) $(CXXFLAGS) $(LIBS) -c $<
Обычно bar.h
включает Foolib/foolib.h
, а также Otherlib/OtherlibSrcDirectory
и bar.cpp
включает bar.h
. Затем некоторые функции из foolib.h
вызываются в bar.cpp
и возвращают значения ошибок. Если необходимо, я могу подробнее рассказать о коде, но пока оставлю его, чтобы он был немного короче.
Любая помощь будет очень признательна!