【发布时间】:2021-09-28 09:04:59
【问题描述】:
我正在尝试为基于 arm 的系统交叉编译我的应用程序。
我有 2 个按以下方式编译的库:
$ gcc -shared --sysroot=$DIR_PATH -o $LIBPATH/libfoo.so foo.o
$ gcc -shared --sysroot=$DIR_PATH -o $LIBPATH/libbar.so bar.o
编译第三个库:
gcc -shared -o $LIBPATH/libfoobar.so --sysroot=$DIR_PATH -L$LIBPATH -Wl,rpath=$RUN_TIME_PATH foobar.o -lfoo -lbar
最后我编译了一个二进制文件:
gcc -o app --sysroot=$DIR_PATH -L$LIBPATH -Wl,rpath=$RUN_TIME_PATH app.o -lfoobar
但是在编译应用程序时我得到了
warning: libfoo.so, needed by libfoobar.so, not found (try using -rpath or -rpath-link)
【问题讨论】:
-
您的意思是,在链接
app时会出现该错误,而不是在编译app.o时? -
我们无法帮助您,因为您没有告诉我们 (a) 各种库在哪个目录中,以及 (b)
$LIBPATH的值是什么。如果库不在$LIBPATH中,那就是问题所在。如果它们在当前工作目录中,并且与$LIBPATH不同,那么您需要将-L.添加到链接行,链接器才能找到它们。 -
是的。我的意思是应用程序。
-
LIBPATH=/home/user/proj_dir/ShOb RUN_TIME_PATH=/usr/lib(在目标上)
-
运行时路径与此问题无关,因为它仅在您运行程序时生效。在这里,您正在链接程序。您没有告诉我们调用链接命令的工作目录是什么。是
/home/user/proj_dir/ShOb吗?如果不是,那么这就是您的问题,因为您的库位于本地目录中,但本地目录并未提供给链接器作为查找库的位置(通过-L)。
标签: makefile cross-compiling gnu