【发布时间】:2016-06-16 23:57:37
【问题描述】:
我正在使用 cmake 生成一个 gstreamer 库。最后 cmake 使用以下命令进行链接:
/usr/bin/cc -fPIC -shared -Wl,-soname,libmacq-gstmelpi.so -o libmacq-gstmelpi.so <OBJECT_FILES> -lmacq-melpi -lmacq-icar-tools -lmacq-gstmecimeta -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lgstvideo-1.0
注意末尾的 -lgstvideo-1.0 标志。该命令运行正常,没有产生错误,并且生成的库创建得很好。但是,当我使用该库时,我得到 undefined symbol 错误。所以我用ldd来检查;在 ldd 的所有输出中; libgstvideo-1.0.so 找不到。
这个问题发生在 Ubuntu 14.04 的 armhf 架构上。在 opensuse 13.1 (i586) 和 opensuse 13.1 (armv7hl) 上都不会出现该问题,因为在这种情况下 ldd libmacq-gstmelpi.so | grep gstvideo 会给出:
libgstvideo-1.0.so.0 => /usr/lib/libgstvideo-1.0.so.0 (0xb715f000)
编辑:
我有另一个库,非常相似,其中一个非常相似的命令可以正常工作;生成的库已正确链接到 libgstvideo-1.0.so
/usr/bin/cc -fPIC -shared -Wl,-soname,libmacq-gstplugins.so -o libmacq-gstplugins.so <OBJECT_FILES> -lmacq-icar-tools -lmacq-gstmecimeta -lgstapp-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lgstvideo-1.0
关于我检查并尝试过的一些评论:
- /usr/lib/arm-linux-gnueabihf/libgstvideo-1.0.so 存在。 (发现/usr/lib/arm-linux-gnueabihf/中的其他库没有问题,libmacq-gstmelpi.so链接到/usr/lib/arm-linux-gnueabihf/libgstreamer-1.0.so.0没有问题)
- 我尝试更改顺序,并将 -lgstvideo-1.0 标志放在所有其他 -l 标志之前;没有成功。
- 用
c++或gcc替换cc;命令有效,但输出相同 - 在构建工作的系统上删除 -lgstvideo-1.0。生成的库构建(链接)没有错误;但是在执行时,我遇到了与 Ubuntu 上相同的 undefined symbol 错误。这证明缺少的符号在 libgstvideo-1.0.so 中,并且我需要它。
【问题讨论】: