gpt4 book ai didi

c++ - 如何将用户编译的共享库的共享库链接到 Debian 上的 c++ 应用程序?

转载 作者:行者123 更新时间:2023-11-28 06:29:40 25 4
gpt4 key购买 nike

假设您有一个共享库 A.so,并且另一个共享库 B.so 是根据 A.so 编译的。换句话说,

ldd B.so

提到 A.so.此外,假设 A.so 和 B.so 已经由我自己编译成功,即它们位于我的主目录中的某个位置。

现在,我有一个应用程序 App,我想针对 A.so 和 B.so 进行编译。因为 A.so 包含在 B.so 中,所以我只想链接到 B.so。

因此,我在两个不同的 Linux 系统下完成了该操作。我尝试了 SLES 10 SP2 和 Debian 7.7.0(基本安装,在那个系统上没什么特别的)。在 SLES 10 SP2 上,这绝对没有问题。在 Debian 上,我收到如下消息:

/usr/bin/ld: /tmp/ccjQFzpo.o: undefined reference to symbol '_ZN2sf7secondsEf'
A.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

A.so 可以是我自己编译的 Qt4 库。如果我使用 apt-get install 安装 Qt4 库,那么它就可以工作。

我尝试将 A.so 和 B.so 添加到给定的列表中

ldconfig -v

即我已经能够在此列表中看到它们。它不能解决问题。

我错过了什么?

最佳答案

Because A.so is contained in B.so, I want to link against B.so only.

这是误解,当它们链接时共享库不包含在另一个库或应用程序中,它们是动态加载的。动态库与静态库的全部目的。它之前对你有用,因为链接器会自动加载所有依赖的库。

对于 debian 我相信自从 wheezy 他们改变了 DSO 链接策略 - 依赖的共享库不会自动链接,你必须在链接你的时列出所有它们应用程序(在你的情况下你必须明确地说出 A.so 和 B.so)。详情可以在这里找到https://wiki.debian.org/ToolChain/DSOLinking

关于c++ - 如何将用户编译的共享库的共享库链接到 Debian 上的 c++ 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27847212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com