4

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

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

GCC / iPhone是否有任何等价物?我正在使用带有 GCC 4.2 的 Xcode 3.1.4 并针对 iPhone OS 3.1。或者,是否有某种方法可以告诉应用程序链接静态库中的每个对象文件,而不管它是否被显式引用?我已经确认使用ar全套目标文件将其放入静态库中。

提前致谢。

4

2 回答 2

5

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

   -all_load
       Loads all members of static archive libraries.  See man ld(1) for
       more information.
于 2009-09-21T09:25:45.117 回答
3

-all_load如果您碰巧链接了许多库和/或框架(Mac OS X),则会出现一些问题。在这种情况下,您应该只使用以下命令强制来自特定库的所有符号-force_load

g++ test.cpp -o test -force_load libtoload.a
于 2010-02-19T21:19:37.633 回答