我创建用于iPhone应用程序使用一个静态库。它包含大量出口无符号的源文件,他们做的是实例化一个类,然后运行在其构造一些代码,与其他地方的中央管理器类注册各种事物的静态实例。当代码被编译为一个标准的iPhone应用程序的一部分,这一切工作正常,但是当它被分离成一个静态库这些文件不会使它成为最终的应用程序二进制的,所以该构造它们所包含唐私有类实例“吨得到运行,这会导致问题。我已经关闭了所有的构建选项做死剥离等的静态库的建立和最终应用构建两者。

我跑进上Metrowerks的编译器的这个问题前一段时间,但在那种情况下,即使代码内置到一个单一的应用程序而无需任何中间库,它正在发生。该解决方案是非常简单:只需使用私营类实例__declspec(force_export),一切都很好。

是否有任何等效GCC / iPhone?我使用的Xcode 3.1.4与GCC 4.2和针对iPhone OS 3.1。或者是有一些方法告诉应用程序不管它是不是明确提到在静态库中的每个对象文件链接?我已经使用ar了全套的目标文件都使它成为静态库的证实。

预先感谢。

有帮助吗?

解决方案

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

   -all_load
       Loads all members of static archive libraries.  See man ld(1) for
       more information.

其他提示

如果你碰巧许多链接库和/或框架键(Mac OS X)-all_load有一些问题。在这种情况下,应该仅强制从一个特定的库中的所有码元通过使用-force_load

g++ test.cpp -o test -force_load libtoload.a
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top