C++ gcc中未定义的引用与elux 5上的udev链接

C++ gcc中未定义的引用与elux 5上的udev链接,c++,gcc,linker,udev,C++,Gcc,Linker,Udev,我正在尝试将一些适当的代码链接到一个特殊的Linux发行版eLux 5(在eLux 4上工作)上。 命令行非常长,包含:-ludev-lpenDriverApi(两个动态库,penDriverApi都是依赖于udev的适当代码)。 现在链接器告诉我,udev中没有定义各种引用,比如“udev\u monitor\u unref”。通过“nm”,我验证了这些引用在udev共享对象中是可用的——所以这个错误消息对我来说真的很奇怪。 因为我还尝试了链接器的各种详细/调试设置,所以我现在还不知道如何找出

我正在尝试将一些适当的代码链接到一个特殊的Linux发行版eLux 5(在eLux 4上工作)上。 命令行非常长,包含:-ludev-lpenDriverApi(两个动态库,penDriverApi都是依赖于udev的适当代码)。 现在链接器告诉我,udev中没有定义各种引用,比如“udev\u monitor\u unref”。通过“nm”,我验证了这些引用在udev共享对象中是可用的——所以这个错误消息对我来说真的很奇怪。 因为我还尝试了链接器的各种详细/调试设置,所以我现在还不知道如何找出链接我的cmake项目时出现的错误

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

ELUX4上的udev版本为0.6.1
eLux 5中的udev版本是链接序列中的1.3.5

任何需要符号的对象文件或库 定义必须出现在提供定义的库之前, 或未定义的引用错误将确保。这是因为 默认情况下,链接器将只搜索库以查找 其观察到的符号在早期版本中被引用,但未定义 档案

因此,如果
libpenDriverApi
依赖于
libudev
,则必须按以下顺序链接:

-lpenDriverApi -ludev

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

顺序由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版本没有找到与错误中提到的引用相关的东西-所以从我的观点来看,一切都应该是好的。