首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制包含不导出任何符号的静态库对象文件(GCC/iPhone)

强制包含不导出任何符号的静态库对象文件(GCC/iPhone)
EN

Stack Overflow用户
提问于 2009-09-20 10:39:34
回答 2查看 2.1K关注 0票数 4

我正在创建一个在iPhone应用程序中使用的静态库。它包含许多不导出符号的源文件,它们所做的只是实例化一个类的静态实例,然后在其构造函数中运行一些代码,该构造函数在其他地方向中央管理器类注册各种内容。当代码作为标准iPhone应用程序的一部分构建时,这一切都可以很好地工作,但是当代码被分离到静态库中时,这些文件不会进入最终的应用程序二进制文件,因此它们包含的私有类实例的构造函数不会运行,这会导致问题。对于静态库构建和最终的应用程序构建,我已经关闭了每个构建选项,以执行死区剥离等操作。

不久前,我在Metrowerks编译器上遇到了这个问题,但是在那个实例中,即使在没有任何中间库的情况下将代码构建到单个应用程序中,也会发生这个问题。解决方案非常简单:只需在私有类实例上使用__declspec(force_export),一切都很好。

有没有和GCC/iPhone类似的?我使用的是Xcode3.1.4和GCC 4.2,目标是iPhone OS 3.1。或者,是否有某种方法可以告诉应用程序链接静态库中的每个对象文件,而不管它是否被显式引用?我已经使用ar确认了完整的目标文件集正在进入静态库。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-21 09:25:45

我认为您正在寻找的选项是-all_load

代码语言:javascript
复制
   -all_load
       Loads all members of static archive libraries.  See man ld(1) for
       more information.
票数 5
EN

Stack Overflow用户

发布于 2010-02-20 05:19:38

如果您碰巧链接了许多库和/或框架(Mac ),-all_load就会有一些问题。在这种情况下,应仅使用-force_load强制特定库中的所有符号

代码语言:javascript
复制
g++ test.cpp -o test -force_load libtoload.a
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1450748

复制
相关文章

相似问题

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