【问题标题】:undefined references in gcc link with udev on elux 5gcc 中未定义的引用与 elux 5 上的 udev 链接
【发布时间】:2016-05-26 08:07:19
【问题描述】:

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

希望这张图片是可读的,因为该死的 vmware 将允许启用复制/粘贴(可能 elux 配置不好)。

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

【问题讨论】:

    标签: c++ gcc linker udev


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      所以如果libpenDriverApi 依赖于libudev 那么你必须按顺序链接:

      -lpenDriverApi -ludev
      

      【讨论】:

      • 命令已经cmake完成了,但是我自己也在命令行尝试了链接器命令,所以我也尝试在不改变结果的情况下改变-l的顺序:(跨度>
      • @user3021395 在这种情况下,您至少需要发布整个失败的链接命令以及随之而来的错误。将它们添加到问题的正文中。要让make 打印它实际​​在做什么,请执行make VERBOSE=1
      • 我希望这是可能的,但是这台该死的 vmware 机器不会允许(在启用来宾隔离复制/粘贴的情况下)。也许截图会起作用。
      • @user3021395 make VERBOSE=1 1>buildlog.txt 2>&1 然后将 buildlog.txt 从 VM 中复制出来。
      • 添加截图。问题:可能是 elux 的 udev 版本太旧了,以至于必须针对 elux 5 的从未 udev 版本编译/链接属性库吗?我已经验证了 udev 版本的所有更改,但没有找到与错误中提到的参考相关的内容 - 所以从我的角度来看,一切都应该没问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 2020-06-30
      相关资源
      最近更新 更多