【发布时间】:2020-12-04 09:50:19
【问题描述】:
我正在尝试构建一个依赖于共享库 (libnode.so) 的应用程序 (libnodeapplication),该共享库又依赖于我粘贴在同一位置的另一个共享库 (libgentoo-5.so.100)作为 libnode(在 /usr/lib/ 内)
问题是第二个依赖库符号链接到另一个文件
编译命令需要进行哪些更改才能成功构建它(对于在共享库中引用的符号链接文件)
我也尝试使用 -Wl,-rpath= command2: 错误 下面是错误 (为简单起见,我使用 gcc 而不是 arm linux 交叉编译器)
所以我的最终应用程序是依赖于共享库的 libnodeapplication => 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) 我使用这个 command1 : 当我尝试使用 objdum -t libnode.so 时,当我尝试通过上述 command2 我的 Makefile(用于 libnodeapplication) 为 libnode.so 创建文件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 obj1.o obj2.o obj3.o -shared -o libnode.so /usr/lib/libgentoo-5.so.100CC=<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
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
【问题讨论】:
标签: linux gcc cross-compiling arm-linux