如何将用户编译的共享库的共享库链接到 Debian 上的 c++ 应用程序
How do you link a shared library of a user-compiled shared library to a c++ application on Debian?
假设您有一个共享库 A.so,并且另一个共享库 B.so 是根据 A.so 编译的。换句话说,
ldd B.so
提到 A.so。此外,假设 A.so 和 B.so 已经由我自己成功编译,即它们位于我的主目录中的某个地方。
现在,我有一个应用程序应用程序,我想针对 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 安装安装 Qt4 库,那么它可以工作。
我试图将 A.so 和 B.so 添加到给出的列表中
ldconfig -v
即我已经能够在此列表中看到它们。它不能解决问题。
我错过了什么?
由于 A.so 包含在 B.so 中,因此我只想针对 B.so 进行链接。
这是误解,共享库在链接时不包含在另一个库或应用程序中,它们是动态加载的。动态库与静态库的全部目的。它以前对你有用,因为链接器自动加载了所有依赖的库。
对于debian
我相信,自从wheezy
他们更改了 DSO 链接策略 - 依赖的共享库不会自动链接,您必须在链接应用程序时列出所有这些库(在您的情况下,您必须明确说 A.so 和 B.so)。详情请点击此处 https://wiki.debian.org/ToolChain/DSOLinking
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 将静态库链接到不带-fPIC的共享库中
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 无法在Ubuntu上将共享库与Eclipse链接
- 从python调用openMP共享库时,未定义opnMP函数
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 为什么我的共享库中存在展开符号
- 使用共享指针的函数调用,其对象应为 const
- 具有两个独占锁组的共享锁
- 共享队列的线程安全
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 如何将用户编译的共享库的共享库链接到 Debian 上的 c++ 应用程序
- 在arm Debian上加载共享库时出错
- Debian libmod .so.8:不能打开共享对象文件:没有这样的文件或目录