我正在尝试构建一个依赖于共享库(libnode.so)的应用程序(libnodeapplication),该共享库又依赖于另一个共享库(libgentoo-5.so.100),我将其粘贴在与libnode相同的位置(在 /usr/lib/ 内)
问题是第二个依赖库符号链接到另一个文件
编译命令需要进行哪些更改才能成功构建它(对于在共享库中引用的符号链接文件)
我也尝试使用 -Wl,-rpath=<path to usr/lib/path_to_libgentoo-5.so.100 (也没有文件名):
命令2:
gcc main.o -o libnodeapplication -L/usr/lib/-lnode -Wl,-rpath=/usr/lib/
错误
下面是错误
ld: warning: libgentoo-5.so.100, needed by /usr/lib/libnode.so, not found (try using -rpath or -rpath-link)
usr/lib/libnode.so: undefined reference to `symbol1 in libgentoo-5.so.100'
usr/lib/libnode.so: undefined reference to `symbol2 in libgentoo-5.so.100'
usr/lib/libnode.so: undefined reference to `symbol3 in libgentoo-5.so.100'
.
.
.
and so on
(为简单起见,我使用 gcc 而不是 arm linux 交叉编译器)所以我的最终应用程序是 libnodeapplication,它依赖于共享 lib => libnode.so
libnode.so 正在使用 libgentoo-5.so.100 构建(它存在于 /usr/lib 中并符号链接到 libgentoo-5.so.100.20.0 :libgentoo-5.so.100 -> libgentoo- 5.so.100.20.0)
我使用这个命令1 :
gcc obj1.o obj2.o obj3.o -shared -o libnode.so /usr/lib/libgentoo-5.so.100
当我尝试使用 objdum -t libnode.so 时,当我尝试通过上面的命令 2构建 libnodeapplication 时,我可以找到所有报告为未定义符号的符号
我的 Makefile(用于 libnodeapplication)
CC=<path to tool chain>arm-linux-gnueabihf-gcc
CFLAGS=-Wall
LIB_NAME=-lnode
LIBS=-L$(TARGET_DIR)/usr/lib
INCS=-I./include/
OBJS=libnodeapplication.o
libnodeapplication: $(OBJS)
$(CC) $(OBJS) -o libnodeapplication $(LIBS) $(LIB_NAME)
main.o: main.c
$(CC) $(INCS) $(CFLAGS) -c $< -o $@
clean:
-rm -rf *.o libnodeapplication
-rm -rf $(TARGET_DIR)/root/libnodeapplication
install:
cp libnodeapplication $(TARGET_DIR)/root
chmod +x $(TARGET_DIR)/root/libnodeapplication
为 libnode.so 创建文件
CC=<path to tool chain>arm-linux-gnueabihf-gcc
CFLAGS=-Wall -fPIC
INCS=-I./include/
LIBS=$(TARGET_DIR)/usr/lib/libgentoo-5.so.100
OBJS=libnode.o helper.o
libnode: $(OBJS)
$(CC) $(OBJS) -shared -o a.so $(LIBS)
libnode.o: libnode.c
$(CC) $(INCS) $(CFLAGS) -c $< -o $@
helper.o: helper.c
$(CC) $(INCS) $(CFLAGS) -c $< -o $@
clean:
-rm -rf *.o
-rm -rf libnode.so
-rm -rf $(TARGET_DIR)/usr/lib/libnode.so
-rm -rf $(TARGET_DIR)/usr/include/libnode.h
install:
-cp libnode.so $(TARGET_DIR)/usr/lib
-cp libnode.h $(TARGET_DIR)/usr/include