2010-09-28 3 views
0

Я разрабатываю программу на OSX 10.6.4 (Snow Leopard), и я хочу иметь возможность запускать скомпилированный продукт на других компьютерах Intel, некоторые из которых могут не иметь XCode isntalled.Как скомпилировать программу для распространения на Mac

Чтобы упростить ситуацию, я сначала написал программу Hello World.

#include<stdio.h> 
int main() { 
    printf("Hello world!\n"); 
    return 0; 
} 

Если я скомпилировать как

gcc -static prog.c 

я получаю ошибку folllowing:

ld: library not found for -lcrt0.o 

Я не знаю, где найти эту библиотеку. Теперь некоторые люди упомянули, что я не должен ставить статически на macs, так как система должна быть доступна в разных библиотеках (сторонние библиотеки могут быть связаны вручную). Однако, когда я пытаюсь запустить эту программу Hello World на другом макинтош, я получаю на следующие ошибки:

dyld: unknown required load command 0x80000022 
Trace/BPT trap 

Итак, как вы скомпилировать программу на Mac, так что она может распространяться? У меня нет проблем с архитектурой, так как большинство компьютеров меня интересуют Intel Mac.

+0

Вы не должны связывать статически, потому что на mac нет статических библиотек. Все системные библиотеки * доступны только * в общей форме. Ваша проблема, вероятно, что-то еще. – Sven

+0

Предположим, что это исполняемый файл pure-C Unix, а не GUI-приложение? – JulesLt

ответ

2

Не использовать -static. Ваш исполняемый файл будет отлично работать на других Mac OS 10.6.x x86. Если вы хотите развернуть на Mac до 10.6, вам нужно будет использовать соответствующий SDK, но кроме этого он должен «просто работать», независимо от того, установлены ли инструменты разработчика.

+0

я попытался собрать в GCC prog.c -isysroot /Developer/SDKs/MacOSX10.5.sdk Тем не менее, до сих пор givesdyld: команда не требуемая нагрузка 0x80000022 Трассировка/BPT ловушка на старой машине. Это как использовать SDK? – highBandWidth

+0

Хорошо, поэтому он работает для программы Hello World после добавления -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min = 10.5 в командную строку gcc. Однако для программы на C++ ему нужны определенные реализации tr2, представленные в 10.6, и он не компилируется с этим SDK. Он компилируется, если я использую macports gcc, но затем при запуске на другом компьютере не удается найти функцию в /ust/lib/libstdc++.6.dylib. – highBandWidth

+0

Если у вас есть зависимость от 10.6, то, очевидно, ваш исполняемый файл не будет работать на 10.5. –

1

Возможно, стоит использовать XCode для создания исполняемого файла с использованием шаблона программы командной строки (базовые исполняемые файлы Unix), просто потому, что он будет управлять множеством параметров компилятора для вас (включая SDK, который вы компилируете против/версии, на которые вы нацеливаетесь).

Мое предположение заключается в том, что компиляция по умолчанию для комманды будет собираться против существующих системных библиотек (10.6.4).

Смежные вопросы