包含 时出错在iOS预编译头文件中

发布于 2024-10-31 18:53:29 字数 477 浏览 1 评论 0 原文

我正在开发一个 iOS 应用程序,并使用 Boost 库中的共享指针。我的应用程序有点笨重,所以我一直在努力精简它。我认为移动这一行:

#include <boost/shared_ptr.hpp>

从单个文件到预编译头文件将为我节省一些空间,因为我听说每次包含shared_ptr都会重新编译不同的版本,并且不清楚编译器是否正在删除重复项。

当我将此行移至 pch 文件时,我收到大量编译时错误,其中大部分是:

error: expected '=', ',', ';', 'asm' or '__attribute__' before 'boost'

我已将 .pch 文件更改为其信息中的 sourcecode.cpp.h 文件,但这还没有帮助了。

想法?

编辑:刚刚验证我的二进制文件中实际上存在已编译的shared_ptr的重复副本!

I'm developing an iOS app and am using the shared-pointer from the Boost library. My app is a little chunky, so I've been trying to lean it up. I think moving this line:

#include <boost/shared_ptr.hpp>

From individual files to the pre-compiled header file will save me some space since I heard every include of shared_ptr recompiles a different version and it's unclear whether the compiler is removing the duplicates.

When I move this line to the pch file I get a ton of compile-time errors, most of which are:

error: expected '=', ',', ';', 'asm' or '__attribute__' before 'boost'

I've changed the .pch file to be a sourcecode.cpp.h file in its info, but that hasn't helped.

Thoughts?

EDIT: Just verified that there are in fact duplicate copies of the compiled shared_ptr in my binary!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

画离情绘悲伤 2024-11-07 18:53:29

您的项目中可能有 C 或 ObjC 源代码。

在这种情况下:

#if defined(__cplusplus)
#include <boost/shared_ptr.hpp>
#endif

Xcode(默认情况下)会为项目中的每种语言/方言创建一个前缀,如果没有,仍然需要手动#include。不幸的是,将标头移动到 pch 只能添加重复项。但是,它可以减少您的构建时间。

You probably have C or ObjC sources in your project.

In that case:

#if defined(__cplusplus)
#include <boost/shared_ptr.hpp>
#endif

Xcode (by default) creates a prefix for every language/dialect in your project, and if it doesn't, it's still manually #included. Unfortunately, moving a header to a pch could only add duplicates. It could reduce your build times, however.

城歌 2024-11-07 18:53:29

您是否将 Boost 标头包含在 .m 文件或 .mm 文件中?因为在第一种情况下编译器将使用 Objective-C,在第二种情况下编译器将使用 Objective-C++。

Are you included Boost headers in a .m file or .mm files? Because in the first case the compiler will use Objective-C, in the second case Objective-C++.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文