我正在将一个大型C ++库(libcoro.so)和示例应用程序(coro-example.cpp)从Windows移植到RedHat Linux 7.4。我在Linux上的开发经验非常少,所以这可能是一个新手'题。我有libcoro和示例应用程序在我的RHEL 7.4 VM上编译,链接和运行。但是,当他尝试将coro-example.o链接到libcoro.so时,gcc链接器无法链接客户的RHEL 7.4计算机上的应用程序。错误消息是:
/ usr / bin / ld:警告:libusb-0.1.so.4,。/ bin / libcoro.so不需要 找到(尝试使用-rpath或-rpath-link)
libcoro.so:undefined 参考' usb_open'
libcoro.so:未定义的引用 ' usb_release_interface'
...等...
跑步' ldd coro.so'在我的机器上显示:
libusb-0.1.so.4 => /lib64/libusb-0.1.so.4(0x00007f71115db000)
...等等...
在客户的机器上:
libusb-0.1.so.4 =>未找到
[许多其他libs] =>没找到...等... ...
实际上,这些库位于我的/ lib64文件夹中,但不属于客户。我不确定它们是如何安装在我的机器上的。我可以访问缺少的库,并可以使用我的libcoro.so库提供它们。我真的希望我的应用程序是自包含的,并在任何RHEL 7.x计算机上运行。我的问题是:
如果我没有提供本地副本,那么确定哪些库不属于RHEL 7.x安装并且链接器在我的机器上出现故障的最佳方法是什么?我尝试使用-nodefaultlibs进行链接,但链接在printf()等函数上失败,我找不到找到这些标准库的方法。他们似乎不在/ lib64中。
有没有办法从默认库搜索中排除/ lib64?
答案 0 :(得分:1)
有一个链接器开关-Wl,--no-undefined
似乎可以做我想要的。它无法链接并生成错误,因为库未明确命名。此外,命令ldd libcoro.so
列出了所有依赖项以及它们的解析位置。我还发现这个this article非常有帮助。