这是我当前的情况:
我想在Linux上分发一个二进制应用程序,可以在几个发行版上运行(不是所有的,目前只关注主要的,为了本次讨论的重点,我们将专注于Ubuntu和Fedora)。所涉及的应用程序链接到libbz2
以完成某些工作。一个简单的“Hello World”将说明这种情况:
/* main.cpp */
#include <iostream>
int main(int argc, char* argv[])
{
std::cout << "Hello World!\n";
return 0;
}
该应用程序是这样构建的:
g++ -lbz2 -o test.bin main.cpp
我的构建系统在Ubuntu上。当我使用ldd对生成的二进制文件进行检查时,它会列出libbz2.so.1.0作为运行时依赖项。但是当我将该应用程序带到Fedora机器上时,该应用程序无法运行,并且ldd显示找不到libbz2.so.1.0。Fedora仅有libbz2.so.1和libbz2.so.1.0.4,但没有libbz2.so.1.0。
Red Hat的Bugzilla数据库显示,这种行为不是一个错误,而是一种特性。我实际上不需要libbz2.so.1.0,如果能简单地链接到libbz2.so.1就可以了,但我还没有弄清楚如何做到这一点。
我看到这里之前有一个类似的问题被提出(链接),但是被接受的答案(您可以在链接器命令行上传递实际的.so文件而不是-l)似乎不起作用。我尝试使用以下命令进行构建:
g++ /lib/libbz2.so.1 -o test.bin main.cpp
然而,ldd仍然提到该应用程序依赖于libbz2.so.1.0
,尽管我已经将完整名称传递给了g++。
现在的问题是,在Ubuntu上是否有一种方法可以构建该应用程序,使其仅依赖于libbz2.so.1
而不是libbz2.so.1.0
?
谢谢。