สร้างไฟล์. so จากไฟล์. c โดยใช้บรรทัดคำสั่ง gcc


162

ฉันกำลังพยายามสร้างโปรเจค Hello world สำหรับลินุกซ์ไดนามิกไลบรารี (ไฟล์. so) ดังนั้นฉันมีไฟล์ hello.c:

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

ฉันจะสร้างไฟล์. so ที่ส่งออกhello()โดยใช้ gcc จากบรรทัดคำสั่งได้อย่างไร

คำตอบ:


293

ในการสร้าง-fPICไลบรารี่ที่ใช้ร่วมกันคุณต้องรวบรวมรหัส C ของคุณด้วยธง (รหัสอิสระ)

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

สิ่งนี้จะสร้างออบเจ็กต์ไฟล์ (.o) ตอนนี้คุณรับไปแล้วสร้างไฟล์. so:

gcc hello.o -shared -o libhello.so

แก้ไข : คำแนะนำจากความคิดเห็น:

คุณสามารถใช้ได้

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

ที่จะทำในขั้นตอนเดียว - Jonathan Leffler

ฉันยังแนะนำให้เพิ่ม-Wallเพื่อรับคำเตือนทั้งหมดและ-gเพื่อรับข้อมูลการดีบักในgccคำสั่งของคุณ - Basile Starynkevitch


1
คุณต้องทำ gcc -c -fPIC blabla.c -o blabla.o ก่อนแล้วตามด้วยคำสั่งด้านบน
dreamcrash

57
หรือgcc -shared -o libhello.so -fPIC hello.cจะทำในขั้นตอนเดียว
Jonathan Leffler

5
ฉันยังแนะนำให้เพิ่ม-Wallเพื่อรับคำเตือนทั้งหมดและ-gเพื่อรับข้อมูลการดีบักในgccคำสั่งของคุณ
Basile Starynkevitch

ขอบคุณสำหรับคำแนะนำฉันได้เพิ่มพวกเขาไว้ในคำตอบ
Dreamcrash

3
@sashoalm .oไฟล์นั้นเป็นไฟล์วัตถุสำหรับไฟล์ต้นฉบับก่อนที่จะเชื่อมโยงเข้าด้วยกันเป็นไฟล์ปฏิบัติการขั้นสุดท้าย ดังนั้นเมื่อคุณเรียกใช้gcc -o abc.c abc.oไฟล์วัตถุจะถูกสร้างขึ้น ตอบคุณสามารถใช้abc.oไฟล์นี้เพื่อสร้าง.soไฟล์ได้ สำหรับการสร้างไฟล์จำนวนมากสิ่งที่คุณต้องมีคือรหัส c ที่ถูกต้องใน.cไฟล์ PS: เพียงเพื่อเคลียร์ข้อสงสัยของคุณในความคิดเห็น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.