首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何选择依赖与gcc共享的对象?

如何选择依赖与gcc共享的对象?
EN

Stack Overflow用户
提问于 2010-08-05 11:20:27
回答 2查看 5.9K关注 0票数 5

首先,我不知道我的问题是否有解决办法。

我有以下情况:

  • I已经开发了一个框架库,它依赖于其他几个库来进行特定的硬件访问等。到目前为止,这个框架库仅与使用框架库的可执行文件的.
  • 静态链接--只有可执行文件实际使用的代码的依赖项必须进行链接。(如果我根本不访问特定的硬件,我就不需要依赖它的相关库。)

现在,我还需要为框架库创建一个共享对象。此外,依赖项可以作为共享库使用,因此不需要任何静态链接。

我现在的问题是:

  • 在构建动态链接到框架库的应用程序时,我必须将所有依赖项动态链接到框架库或应用程序。(否则我会收到来自ld的未定义的推荐信投诉)

我的问题:

如果我知道我的应用程序将不使用依赖于这个共享对象的框架库的任何代码,那么

  • 是否可以忽略某些共享对象依赖项?
  • 是否有任何方法可以做到这一点,而不进行或只进行最小的代码更改?(链接器/编译器开关)

我还需要静态链接,如在原来的情况下,仍然工作。

附加信息:

Linux操作系统(Debian Lenny)

  • Compiler: gcc-4.3

)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-05 13:09:30

来自man ld

-作为需要的

--no-as-needed

此选项会影响命令行中提到的动态库的ELF DT_NEEDED标记,该选项将在--按需选项之后进行。通常,链接器将为命令行中提到的每个动态库添加一个DT_NEEDED标记,而不管实际是否需要该库。-不需要就恢复默认行为。

我自己没有用过,但听起来像是你要找的东西。

代码语言:javascript
运行
复制
g++ -o your_app -Wl,--as-needed -lframework -la -lb -lc -Wl,--no-as-needed

编辑(汉诺建议)

--warn-unresolved-symbols

如果链接器要报告一个未解决的符号(参见选项--未解决的符号),它通常会生成一个错误。此选项使其生成警告。。

票数 6
EN

Stack Overflow用户

发布于 2010-08-05 11:28:08

您可以,但是基本上您必须自己处理所有的动态库。即dlopen库,然后使用dlsym直接查找所需的符号。

这将使您的代码更加复杂,这在多大程度上取决于您在库中的接口。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3414157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档