Как определить, для какой «цели» объектный файл / модуль скомпилирован в Mac OS Lion (например, «x86_64-apple-darwin11.0»)? - PullRequest
1 голос
/ 06 августа 2011

Я пытаюсь скомпилировать код для OS X Lion, и у меня возникают проблемы со связыванием объектных файлов и библиотек. Я получаю эту ошибку:

ПРЕДУПРЕЖДЕНИЕ. Связывание двух модулей различных целевых троек: «x86_64-apple-darwin11.0» и «x86_64-apple-darwin10»

Есть ли инструмент командной строки, который я могу запустить, чтобы увидеть, какова цель объектных файлов или библиотек? Затем я могу вернуться и отладить процесс компиляции, чтобы убедиться, что все используют одну и ту же сборку.

Спасибо! -Don

1 Ответ

1 голос
/ 09 августа 2011

Для модулей битового кода llvm вы можете разобрать их с помощью llvm-dis и посмотреть на модуль там:

[yendi:~] echristo% llvm-dis foo.bc -o - | grep "target triple"
target triple = "x86_64-apple-macosx10.7.0"

Не полная информация, но в целом, чтобы получить архитектуру, которую вы хотите использовать 'file':

Для отдельного файла .o:

[yendi:~] echristo% file foo.o
foo.o: Mach-O 64-bit object x86_64

или если вы создаете файл битового кода с -O4:

[yendi:~] echristo% /Volumes/Data/builds/build-llvm/Debug+Asserts/bin/clang++ foo.cc -c -emit-llvm -o foo.bc -O4
[yendi:~] echristo% file foo.bc
foo.bc: LLVM bit-code object x86_64

, который не даст вам полную тройку, но даст вам информацию о файле.

Я предполагаю, что у вас есть несколько старых объектных файлов, или вы передаете -mmacosx-version-min = 10.6 для некоторых файлов, а не для других.

...