2015-10-07 87 views
1

我在我的项目中使用了“all_load”和“noall_load”ld标志,但编译器/ ld报告noall_load被忽略。它的替代是什么?什么是Mac OS X上的“-noall_load”标志替换?

$ cc ... -Wl,-all_load lib1 -Wl,-noall_load lib2 lib3 ... 
... 
ld: warning: option -noall_load is obsolete and being ignored 
... 
$ ld -v 
@(#)PROGRAM:ld PROJECT:ld64-253.3 
configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em 
LTO support using: Apple LLVM 7.0.0 (clang-700.0.72) 
+0

你能解释一下你的用例吗?你想通过使用这些链接器选项来实现什么? –

+0

@SimonKissane我编辑了我的帖子。总之,lib1应该作为一个整体存档链接,而lib2和lib3则不应该。应该像这样链接lib1的原因超出了范围。 – Lion

+0

而不是-all_load,您可以使用-force_load来定位特定的归档。 –

回答

2

根据man ld

 -noall_load 
      This is the default. This option is obsolete. 

换句话说,-noall_load是没用的,因为它会禁用加载静态归档库中的所有成员,但默认情况下禁用反正。链接器警告只是为了让你知道你正在向链接器传递一个无用的选项。虽然无用的选项不会对您的构建造成任何伤害,但无用的选项可能会混淆和分散人们的注意力,并且如果在将来的某个版本中完全删除该选项,则可能会导致构建失败并出现错误。

更新:根据您的评论,您正在尝试对某些档案做-all_load,但不是其他档案。在相同的链接器调用中,您不能通过组合-all_load-noall_load来做到这一点,但您可以使用-force_load来完成此操作。