【发布时间】:2012-09-04 23:07:32
【问题描述】:
我在交叉编译与 gstreamer 相关的项目时遇到了极大的麻烦。我正在尝试将它链接到我的交叉编译机上的库 /usr/lib
如果我执行标准链接器标志-L{FILESYS_DIR}/usr/lib -lGLESv2,我会从我的交叉编译工具链中收到 pthread 投诉。因此,我试图在不使用 -L 标志的情况下链接到该库。
无论我做什么,我都会收到undefined symbol glFramebuffer2D. 但是快速的readelf -Wc $FILESYS_DIR/usr/lib/libGLESv2.so | glFrame 会显示一个 glFramebuffer2D 符号。
我正在拔头发,因为无论我为 autoconf 指定什么标志,除非我使用 -L -l 方法,否则名为 libtool 的东西会丢弃我的链接请求...
编辑:我有另一个想法,我尝试了-Wl, $FILESYS_DIR/usr/lib/libGLESv2.so,它在编译和链接中起作用,但在运行时不起作用……对我来说很明显(现在),因为主机根目录是 $FILESYS_DIR。无论如何,这是正确的方法,但我想我需要相对名称。
libtool: link: arm-none-linux-gnueabi-gcc -shared .libs/libgstbla_la-gstblaoverlay.o
.libs/libgstbla_la-gstblastabilize.o .libs/libgstbla_la-gles2_utilities.o -Wl,-
rpath -Wl,/home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib -Wl,-rpath -
Wl,/home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib -L/home/z3/z3-
netra/filesys/fs/opt/gstreamer/lib /home/z3/z3-netra/filesys/fs//opt/gstreamer-
0.4/lib/libgstbase-0.10.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-
0.4/lib/libgstreamer-0.10.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-
0.4/lib/libgstvideo-0.10.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-
0.4/lib/libgobject-2.0.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-
0.4/lib/libgmodule-2.0.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-
0.4/lib/libgthread-2.0.so -lrt /home/z3/z3-netra/filesys/fs//opt/gstreamer-
0.4/lib/libglib-2.0.so -pthread -Wl,-soname -Wl,libgstbla.so -Wl,-version-script -
Wl,.libs/libgstbla.ver -o .libs/libgstbla.so
如果需要,也可以在一行中:
libtool: link: arm-none-linux-gnueabi-gcc -shared .libs/libgstbla_la-gstblaoverlay.o .libs/libgstbla_la-gstblastabilize.o .libs/libgstbla_la-gles2_utilities.o -Wl,-rpath -Wl,/home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib -Wl,-rpath -Wl,/home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib -L/home/z3/z3-netra/filesys/fs/opt/gstreamer/lib /home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib/libgstbase-0.10.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib/libgstreamer-0.10.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib/libgstvideo-0.10.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib/libgobject-2.0.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib/libgmodule-2.0.so /home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib/libgthread-2.0.so -lrt /home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib/libglib-2.0.so -pthread -Wl,-soname -Wl,libgstbla.so -Wl,-version-script -Wl,.libs/libgstbla.ver -o .libs/libgstbla.so
【问题讨论】:
-
您使用了两次
-Wl,-rpath,但实际上并未设置运行时路径。将它们设置为目标系统上的有效库路径,它应该会更好地工作。 -
有趣,请注意,链接调用是由 Automake 为我生成的。我会环顾四周,看看是否可以解决该特定问题。
-
当您说“无论我为 autoconf 指定什么标志”时,您指的是您为配置脚本指定的标志吗?
-
是的,我将它添加到 ./configure 调用中。
-
@JoachimPileborg 有一个运行时路径:它在以下 -Wl 参数中设置:
-Wl,/home/z3/z3-netra/filesys/fs//opt/gstreamer-0.4/lib