Я создал общую библиотеку (например, libabc.so
) и исполняемый файл (например, myapp
), который использует мою общую библиотеку.Я поместил и разделяемую библиотеку, и мой исполняемый файл в мою файловую систему, но когда я запускаю свой исполняемый файл, он выдает мне следующую ошибку
error while loading shared libraries: <target_lib_path>/<mylib>.so cannot open shared object file: No such file or directory.
Теперь моя среда разработки - у меня есть другая целевая файловая система, которая находится в ~/targetfs
после сборки моей общей библиотеки я устанавливаю ее в ~/targetfs/usr/local/abc/lib
.Во время связывания моего приложения я даю ему
LDFLAGS += -L~/targetfs/usr/local/abc/lib
Мое приложение работает нормально.Но когда я запускаю свое приложение в среде, где ~/targetfs
является моей файловой системой, тогда мое приложение выдает ошибку при загрузке общих библиотек:
/home/user/targetfs/usr/local/abc/lib/libabc.so: can not open shared object file. No such file or directory exist.
Теперь, конечно, путь, по которому мое приложение ищет общую библиотекуэто не существует, но я хочу, чтобы мое приложение не зависело от этого пути, скорее, оно должно искать мою общую библиотеку в расположениях /lib
, /usr/lib
, /usr/local/lib
или LD_LIBRARY_PATH
.
Как сделать так, чтобы мое приложение связывало библиотеки независимо от его местоположения?
Ниже приведены файлы сборки для моей общей библиотеки и приложения.
-------------- Makefile общей библиотеки.(Опуская ненужную информацию)
CC = $(CROSS_COMPILE)gcc
CFLAGS = -Wall -shared -fpic
LDFLAGS = -Xlinker --gc-sections --allow-shlib-undefined
LIBRARY = libabc.so
OBJ_DIR = obj
SRC_DIR = src
CHK_DIR_EXISTS = test -d
MKDIR = mkdir -p
# Project Source Files
C_SOURCES += $(SRC_DIR)/abc.c
OBJECTS += $(OBJ_DIR)/abc.o
INCLUDES += -Iinc
$(LIBRARY): $(OBJECTS)
@echo ""
@echo "Linking..." $(LIBRARY)
@$(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) -o $(OBJ_DIR)/$(LIBRARY)
---------- Makefile приложения (Опуская ненужную информацию)
LDFLAGS += $(TARGETFS)/usr/local/abc/lib/libabc.so \
-lpthread -lrt
Любые мысли о том, что отсутствует в моемMakefiles.