Сборка в 32-битном режиме на Mac OS X Lion - PullRequest
0 голосов
/ 05 января 2012

Я попытался скомпилировать LLVM 2.4 в Mac OS X Lion с помощью этой команды.

./configure --enable-pic --prefix=/usr/local CC="gcc -arch i386" CXX="g++ -arch i386"

Я получил эту ошибку.

Undefined symbols for architecture i386:
  "llvm::PATypeHolder::get() const", referenced from:
      llvm::ELFWriter::EmitGlobal(llvm::GlobalVariable*)    in libLLVMCodeGen.a(ELFWriter.o)
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

Что с этим не так?

1 Ответ

2 голосов
/ 05 января 2012

Для кросс-компиляции конфигурация нравится, когда вы предоставляете хост, цель и сборку, используя кортеж машины.

Если вы не знаете, что такое ваш кортеж машины, вы можете найти его, используя

gcc -dumpmachine

Что, используя отчеты Lion:

i686-apple-darwin11

Обратите внимание, что на Lion x86_64-apple-darwin11 действителен для 64-битной версии. Но, чтобы использовать это при сборке llvm:

./configure \
     --enable-pic \
     --prefix=/usr/local \
     --host=i686-apple-darwin11 \
     --target=i686-apple-darwin11 \
     --build=i686-apple-darwin11

Это должно сработать, но вы можете включить

--enable-languages=c,c++,obj-c
--enable-optimized 

Вы также можете проверить библиотеки, с которыми вы ссылаетесь, используя 'file' и 'otool'.Или, если это статический архив, с которым вы связываетесь (что, похоже, имеет место ...), мой тест для быстрого запуска будет

 ar p somelib.a $(ar t somelib.a | grep \.o | tail -1) | file -

Вы не собираетесь работать с i386 OSX Lion box,поэтому сборка clang для i386 кажется излишней - вы, вероятно, могли бы собрать 64-битную версию (какую бы она не выбрала по умолчанию), а затем, когда вы скомпилируете WITH, вы бы указали '-m32' или '-m64' в ваших CFLAGS или CXXFLAGSгенерировать правильную битовую глубину объектов.

-n

...