【发布时间】:2018-07-06 06:30:33
【问题描述】:
我正在将一个大型 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 => 未找到
[许多其他库] => 未找到
...etc...
确实,这些库在我的 /lib64 文件夹中,但不在客户的文件夹中。我不确定它们是如何安装在我的机器上的。我可以访问缺少的库,并且可以使用我的 libcoro.so 库来交付它们。我真的希望我的应用程序是独立的并且可以在任何 RHEL 7.x 机器上运行。我的问题是:
如果我不提供本地副本,那么确定哪些库不属于 RHEL 7.x 安装并且链接器在我的机器上失败的最佳方法是什么?我尝试使用 -nodefaultlibs 进行链接,但在 printf() 等函数上链接失败,而且我还没有找到找到这些标准库的方法。它们似乎不在 /lib64 中。
有没有办法从默认库搜索中排除 /lib64?
【问题讨论】:
-
"...这些库在我的 /lib64 文件夹中..." - Red Hat 和 Fedora 在 64 位机器上使用
lib64/(但不是 32-位机)。 Debian 和 Ubuntu 使用更传统的方案,其中库位于lib/。另请参阅您的/usr/share/config.site,它由pkg-config使用。另请参阅 Stack Overflow 上的 config.site for vendor libs on Fedora x86_64。 -
@jww 我的 RHEL 7.4 VM 没有
/usr/share/config.site。我还能在哪里寻找它? -
试试
find /usr -name config.site。我无法使用 Red Hat 机器,所以我在 Fedora 和 CentOS 上进行测试。