gcc link 中未定义的引用与 elux 5 上的 udev

undefined references in gcc link with udev on elux 5

我正在尝试 link eLux 5 上的一些专有代码(在 eLux 4 上工作)一个特殊的 Linux 发行版。 命令行很长,包含:-ludev -lpenDriverApi(都是动态库,penDriverApi 是依赖于 udev 的专有代码)。 现在 linker 告诉我各种引用在 udev 中是未定义的,比如 'udev_monitor_unref'。使用 "nm" 我验证了这些引用在 udev 共享对象中可用 - 所以这个错误消息对我来说真的很奇怪。 因为我还尝试了 linker 的各种 verbose/debug 设置,所以我现在不知道如何找出在我的 cmake 项目 linking 期间出了什么问题。

希望这张图片是可读的,因为该死的 vmware 会允许启用 copy/paste(也许 elux 配置不好)。

eLux 4 上的 udev 版本是 0.6.1 eLux 5 中的 udev 版本是 1.3.5

在 linkage 序列中任何需要符号的目标文件或库 定义必须出现在提供定义的库之前, 或未定义的参考错误将确保。这是因为 link默认情况下,er 将搜索库仅查找以下内容的定义 它所观察到的符号在早期被引用,但未定义 文件。

所以如果 libpenDriverApi 依赖于 libudev 那么你必须 link 的顺序是:

-lpenDriverApi -ludev

这个问题的解决方案是,第三方共享库 libpenDriverApi.so 需要使用 libudev.so.1 重新编译以及对链接器的更改,以便 ldd -r 也显示对 libudev 的依赖。