2017-01-10 4 views
-3

Я знаю, что приложения командной строки являются автономными и могут быть вызваны из оболочки. С другой стороны, статические библиотеки связаны с другими программами.В чем разница между статической библиотекой и приложением командной строки?

Но какова на самом деле разница между этими двумя? Это один и тот же двоичный файл с другим интерфейсом? Или это совсем другое?

+2

Что? Это буквально сравнивает яблоки с апельсинами. –

+0

Не обязательно нужна оболочка для запуска/запуска (любой) программы. – alk

+0

Не знаете, почему пустые голоса. Один и тот же код может быть скомпилирован как в автономное приложение, так и в статическую библиотеку. Я пытаюсь понять разницу между ними. – dwkns

ответ

0

Это совсем другое. У автономного приложения есть двоичный продукт, который может быть выполнен непосредственно. Однако статические библиотеки не могут выполняться самостоятельно. Отдельное приложение может ссылаться на набор статических библиотек, и в этом случае символы, определенные в этих библиотеках, будут доступны для приложения.

Чтобы дать вам пример, вы можете создать статическую библиотеку, которая декларирует следующую функцию в helper.h и определяет его в helper.c:

int func() { 
    printf("hi\n"); 
} 

При создании этой библиотеки, вы будете в конечном итоге с чем-то вроде helper.a который не может быть выполнен независимо (он не имеет int main()), но может быть связан одним или несколькими автономными приложениями. После подключения эти приложения могут просто включать helper.h и звонить func(), как если бы они реализовали func().

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

+0

Здесь «* После подключения эти приложения могут просто включать helper.h и вызвать func(), как если бы они реализовали func(). *« Порядок неправильный. Начните с включения заголовка (затем скомпилируйте), затем свяжите библиотеку, затем и только затем запустите программу, которая в конечном итоге вызывает функцию func(). – alk

+0

Это правильно. Основываясь на его вопросе, я предполагал, что OP использует Xcode, в котором привязка выполняется с помощью настроек сборки. – Pejman

+0

"* ссылка выполняется через настройки сборки *" как это изменит необходимый порядок? Связывание - это * последний шаг во время сборки. – alk