Мы используем предварительно скомпилированные заголовки с 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)
Изменить: как указал Марк, в соответствии с XCode предварительно скомпилированный заголовок должен быть создан отдельно для каждой архитектуры, поэтому мой вопрос скорее в том, есть ли способ заставить gcc использовать правильный предварительно скомпилированный заголовок при создании универсальных объектов.
Я понимаю, что могу построить каждую архитектуру полностью отдельно, как это делает XCode, но я бы предпочел воспользоваться возможностью построить их одновременно и не возиться с разными конфигурациями сборки.
-arch
. Ребята из Qt, кажется, делают что-то странное, чтобы заставить это работать, вы можете проверить это... qt.gitorious.org/qt/qt/merge_requests/2193 - person Lucas   schedule 07.02.2010