macos - 在 OSX 上预编译头和编译通用对象

标签 macos gcc x86-64 precompiled-headers

我们正在为我们的项目使用带有 GCC 的预编译头文件,并像这样构建它们:

gcc $(CFLAGS) precompiledcommonlib.h

现在我正在 OSX 10.6 上构建项目,并尝试同时为所有架构使用构建的漂亮功能,如下所示:
gcc $(CFLAGS) -c -arch i386 -arch x86_64 commonlib.c  

但是,这似乎不适用于预编译头:
gcc $(CFLAGS) -arch i386 -arch x86_64 precompiledcommonlib.h
Undefined symbols for architecture i386:
  "_main", referenced from:
      start in crt1.10.6.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
Undefined symbols for architecture x86_64:
  "_main", referenced from:
      start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
lipo: can't open input file: /var/folders/z1/z1A0sPkqGDyPrZWo9ysVK++++TI/-Tmp-//cc3W2gwd.out (No such file or directory)

编辑:
正如 Mark 根据 XCode 指出的那样,必须为每个体系结构单独构建预编译头,所以我的问题是,在构建通用对象时,是否有任何方法让 gcc 使用正确的预编译头。

我确实意识到我可以像 XCode 那样构建完全独立的每个架构,但我更愿意利用同时构建它们的可能性,而不必弄乱不同的构建配置。

最佳答案

你的问题不在于架构。两者都失败

问题是您正在尝试构建没有主函数的可执行文件。

由于文件名是 commonlib.c,我怀疑您想构建一个库,如果这样的话,在 XCode 中使用库模板启动项目。

关于macos - 在 OSX 上预编译头和编译通用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1757509/

相关文章:

c++ - 将虚函数添加到类声明的末尾可以避免二进制不兼容?

c++ - <atomic> 的 CMPXCHG16B 和 MSVC 实现不是默认的?

macos - 如何遍历 macOS 中其他应用程序的窗口/ View 层次结构?

c - GCC 左移溢出

c - 在 gcc 中将 NULL 分配给 double 类型的引用指针会产生错误

c++ - 如何从 x64 程序集中的堆栈获取参数?

linux - 将数据从 32 位用户程序传递到 64 位 linux

c# - 在 OS X 终端中构建和运行 Monodevelop 解决方案

cocoa - 在 Cocoa 中查找插入的 CD 的名称

c++ - 禁用赋值运算符优化的 GCC 选项是什么