Створіть .so файл із .c-файлу за допомогою командного рядка gcc


162

Я намагаюся створити привіт світовий проект для динамічних бібліотек Linux (файли .so). Отже, у мене є файл hello.c:

#include <stdio.h>
void hello()
{
    printf("Hello world!\n");
}

Як створити файл .so, який експортує hello(), використовуючи gcc з командного рядка?

Відповіді:


292

Щоб створити спільну бібліотеку, потрібно спершу скомпілювати свій C код із -fPICпрапором (незалежний від позиції код).

gcc -c -fPIC hello.c -o hello.o

Це створить об’єктний файл (.o), тепер ви візьмете його та створите файл .so:

gcc hello.o -shared -o libhello.so

EDIT : Пропозиції з коментарів:

Можна використовувати

gcc -shared -o libhello.so -fPIC hello.c

зробити це одним кроком. - Джонатан Леффлер

Я також пропоную додати, -Wallщоб отримати всі попередження та -gотримати інформацію про налагодження до своїх gccкоманд. - Базиле Старинкевич


1
Ви повинні виконати gcc -c -fPIC blabla.c -o blabla.o спочатку, а потім вищевказану команду.
dreamcrash

57
Або gcc -shared -o libhello.so -fPIC hello.cзробити це в один крок.
Джонатан Леффлер

5
Я також пропоную додати, -Wallщоб отримати всі попередження та -gотримати інформацію про налагодження до своїх gccкоманд.
Базиле Старинкевич

Дякую за рекомендації, я додав їх у відповідь
dreamcrash

3
.oФайл @sashoalm - це в основному об'єктний файл вихідного файлу, перш ніж з'єднати їх разом, у остаточний виконуваний файл. Тож при запуску gcc -o abc.c abc.oоб’єктного файлу буде створено файл. Відповідь, ви можете використовувати цей abc.oфайл для створення .soфайлу. Для створення стільки файлів все, що вам потрібно, - це правильний код c, записаний у .cфайлі. PS: Просто для усунення сумнівів у коментарі.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.