han*_*sky 12 macos linker dynamic static-libraries
假设我在安装了Xcode 4.4的运行Mountain Lion的Mac上有一个名为somelib.a的第三方库.我希望得到一个名为somelib.dylib的动态库.适当的Linux命令是:
g++ -fpic -shared -Wl,-whole-archive somelib.a -Wl,-no-whole-archive -o somelib.so
Run Code Online (Sandbox Code Playgroud)
其中-whole-archive和-no-whole-archive传递给链接器.当我做相当于Mac的时候:
g++ -fpic -shared -Wl,-whole-archive somelib.a -Wl,-no-whole-archive -o somelib.dylib
Run Code Online (Sandbox Code Playgroud)
ld失败并出现错误:
ld: unknown option: -whole-archive
Run Code Online (Sandbox Code Playgroud)
似乎OSX上的ld与GNU ld不同.我如何修改上述命令,以便获得所需的结果?
先感谢您!
han*_*sky 14
我找到了解决问题的方法:
g++ -fpic -shared -Wl,-all_load somelib.a -Wl,-noall_load -o somelib.dylib
Run Code Online (Sandbox Code Playgroud)
必需的参数是-all_load和-noall_load.
注意:OSX 链接器文档的链接ld。
http://www.unix.com/man-page/osx/1/ld/
我知道现在给出答案已经晚了,但我没有足够的声誉来对 @hanslovsky 的答案发表评论。然而,拥有这些选项的文档也对我有很大帮助。它有助于选项的确切功能以及ld链接器还具有的其他选项。所以我只是想与发现链接问题的其他人分享。
在@GhostCat 发表评论后,我决定扩展我的答案。
的文档-all_load是:
-all_load
Run Code Online (Sandbox Code Playgroud)Loads all members of static archive libraries.
因此它会加载您注意到的所有静态库。如果您想要类似于--whole-archiveand的东西--no-whole-archive,那么您需要使用-force_loadand -noall_load。
-force_load “存档路径”
加载指定静态归档库的所有成员。注意: - all_load 强制加载所有存档的所有成员。
此选项允许您定位特定的存档。
-noall_load
这是默认设置。此选项已过时。
然后您可以定义要完全加载哪些库-force_load,然后使用 再次将其关闭-noall_load。
| 归档时间: |
|
| 查看次数: |
6204 次 |
| 最近记录: |