2016-03-02 11 views
-2

После того, как c язык скомпилирован, связан, окончательный производственный код не имеет имени метода слева, в результате этот код не может использоваться как api другими, это право ?Недостаток создания библиотеки языка c

После некоторой поисковой работы я нашел, если вы хотите создать библиотеку, вам просто нужно добавить -c переключиться на gcc, а затем использовать команду ar. В результате это означает, что при компиляции с использованием gcc с ключом -c скомпилированный код поддерживает имена методов, то означает ли это, что все api, предоставляемые окнами, после компиляции, но до связывания? Но, по моему мнению, код не может работать или быть связан как библиотека перед связыванием, поэтому угадывание выше неверно. Тогда как понимать эти вопросы?

+0

C не поддерживает _methods_, только _functions_! – Olaf

ответ

2

Вы приравнивая три вида вывода компилятора: статических библиотек, динамических библиотек и исполняемых файлов.

статические библиотеки состоит в основном из архивов .o объектных файлов, которые могут быть добавлены во время компоновки в вашу программу и включены («статический») в окончательную программу. Это «библиотека», на которую вы ссылаетесь -c. Как правило, они имеют расширения файлов .lib (Windows) или .a (Linux).

динамические библиотеки состоят из скомпилированного кода, который был связан вместе со специальной опцией (например, -shared для GCC). Динамические библиотеки сохраняют public символы, что делает их пригодными для использования другими программами. Если вы компилируете свою программу против динамической библиотеки, окончательная программа включает только ссылки в библиотеку - фактический код будет включен динамически. Это значение расширения .dll на Windows - «Динамическая библиотека ссылок». Как правило, они имеют расширения файлов .dll (Windows), .so (Linux) или .dylib (OS X).

исполняемые файлы состоят из скомпилированного кода, который был соединен вместе обычным способом, чтобы сделать их непосредственно выполняемыми. Хотя некоторые исполняемые файлы сохраняют информацию о символах для целей отладки, они обычно не являются динамически загружаемыми, и их код обычно не может использоваться другими программами (это то, что вы подразумеваете под «конечным производственным кодом» в своем вопросе).

Надеюсь, что очистит путаницу.

+0

Большое спасибо. Таким образом, скомпилированные «статические библиотеки» не будут иметь общедоступных символов, не так ли? Это просто компилируется, использование - «статически связано» с конечной программой. Поскольку он уже связан с целевой программой, нет необходимости доставлять статическую библиотеку клиенту, который хочет использовать целевую программу, правильно ли это? –

+0

Да - как только статическая библиотека была связана, исполняемый файл содержит свой код. Поэтому распространение статической библиотеки не требуется. – nneonneo

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