首先,我不知道我的问题是否有解决办法。
我有以下情况:
现在我还需要创建框架库的共享对象。此外,依赖项可用作共享库,因此不需要任何静态链接。
我现在遇到的问题:
我的问题:
如果我知道我的应用程序不会使用依赖于此共享对象的框架库的任何代码,有没有办法忽略某些共享对象依赖项?
有没有办法在没有代码更改的情况下执行此操作? (链接器/编译器开关)
我还需要原始情况中描述的静态链接仍然有用。
其他信息:
答案 0 :(得分:7)
您可以,但您基本上必须自己完成所有动态库处理。即dlopen
库,然后使用dlsym
直接查找所需的符号。
它会使你的代码变得更复杂,多少取决于你进入库的界面。
答案 1 :(得分:6)
来自man ld
<强> - 按需强>
的 - 无按需强>此选项会影响--as-needed选项后命令行中提到的动态库的ELF DT_NEEDED标记。一般, 链接器将为命令行中提到的每个动态库添加DT_NEEDED标记,而不管库是否为 实际需要。 --as-needed导致仅为满足常规符号引用的库发出DT_NEEDED标记 在链接库时未定义的对象,或者,如果在其他DT_NEEDED列表中找不到该库 链接到该点的库,来自另一个动态库的引用。 --no-as-need恢复默认行为。
我自己没有使用它,但听起来就像你在寻找它。
g++ -o your_app -Wl,--as-needed -lframework -la -lb -lc -Wl,--no-as-needed
编辑(Hanno建议)
- 警告 - 未解决的符号
如果链接器要报告未解析的符号(请参阅选项--unresolved-symbols),它通常会生成错误。 此选项使其生成警告。