在Ubuntu中編譯C++動態鏈接庫(通常是.so
文件)的過程相對直接。以下是一個基本的步驟指南:
首先,你需要創建一個頭文件(.h
),其中包含你想要暴露給外部使用的函數和類的聲明。
example.h
#ifndef EXAMPLE_H
#define EXAMPLE_H
void helloWorld();
#endif // EXAMPLE_H
接下來,創建一個或多個源文件(.cpp
),這些文件將實現你在頭文件中聲明的函數。
example.cpp
#include "example.h"
#include <iostream>
void helloWorld() {
std::cout << "Hello, World!" << std::endl;
}
為了簡化編譯過程,你可以編寫一個Makefile來自動化編譯步驟。
Makefile
# Compiler
CXX = g++
# Compiler flags
CXXFLAGS = -fPIC -Wall
# Target library name
TARGET = libexample.so
# Source files
SRCS = example.cpp
# Object files
OBJS = $(SRCS:.cpp=.o)
all: $(TARGET)
$(TARGET): $(OBJS)
$(CXX) -shared -o $@ $^
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
clean:
rm -f $(OBJS) $(TARGET)
在終端中導航到包含Makefile的目錄,并運行以下命令來編譯動態鏈接庫:
make
這將生成一個名為libexample.so
的動態鏈接庫文件。
你可以在其他C++程序中使用這個動態鏈接庫。首先,創建一個新的源文件(例如main.cpp
),并在其中包含頭文件。
main.cpp
#include "example.h"
int main() {
helloWorld();
return 0;
}
然后,使用以下命令編譯并鏈接你的程序:
g++ -o main main.cpp -L. -lexample
注意:-L.
告訴編譯器在當前目錄中查找庫文件,-lexample
告訴鏈接器鏈接名為libexample.so
的庫。
最后,運行你的程序:
./main
你應該會看到輸出:
Hello, World!
通過以上步驟,你可以在Ubuntu中成功編譯和使用C++動態鏈接庫。Makefile的使用大大簡化了編譯過程,使得管理和構建項目更加方便。