gpt4 book ai didi

c++ - 如何使用gcc创建和使用自定义共享库?

转载 作者:太空狗 更新时间:2023-10-29 12:01:06 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的示例共享库 makefile,但我遇到了一些错误并且无法处理,请帮助我,谢谢。

这是我的生成文件:

exampleMain.o: exampleMain.cpp
g++ -std=c++11 -I./ -Wall -g -c exampleMain.cpp


# (1) Basic

example.o: example.cpp
g++ -std=c++11 -I./ -Wall -g -c example.cpp

basic: example.o exampleMain.o
g++ -std=c++11 -Wall -g -pthread example.o exampleMain.o -o basic.exe


# (2) Static Library

static.o: example.cpp
g++ -std=c++11 -I./ -Wall -g -c example.cpp -o static.o

libstatic.a: static.o
ar rcs libstatic.a static.o

static: libstatic.a exampleMain.o
g++ exampleMain.o libstatic.a -pthread -o static.exe


# (3) Simple Shared Library

shared.o: example.cpp
g++ -std=c++11 -I./ -Wall -g -fPIC -c example.cpp -o shared.o

libshared.so: shared.o
g++ -shared -Wl,-soname,libshared.so -o libshared.so shared.o

shared: libshared.so exampleMain.o
g++ exampleMain.o -o shared.exe -L./ -lshared -pthread


# (4) Clean

clean:
rm *.o *.so *.a *.exe *.so.*

这个makefile支持4种操作:

  • (1) 制作基础:basic.exe
  • (2) 静态化:static.exe
  • (3) 制作共享:shared.exe
  • (4) 清理:rm 对象

(3) 可以生成,但是当我尝试“./shared.exe”时,它说:./shared.exe:加载共享库时出错:libshared.so:无法打开共享对象文件:没有这样的文件或目录

这是我的示例代码和生成文件链接:https://github.com/zhaochenyou/Tips/tree/master/tool_chain/make/basic

最佳答案

Make 已经为你需要的大部分内容建立了规则,以下内容应该与警告一起工作,即在共享和非共享之间切换时你需要重新制作 .o 文件

CXXFLAGS := -std=c++11 -Wall -g -pthread
LDFLAGS := -g -pthread

basic.exe static.exe shared.exe: exampleMain.o
basic.exe: example.o
static.exe: libstatic.a
shared.exe: libshared.so

libstatic.a: libstatic.a(example.o)

libshared.so: CXXFLAGS += -fPIC
libshared.so: LDFLAGS += -shared -Wl,-soname,libshared.so
libshared.so: example.o

basic.exe static.exe shared.exe libshared.so:
$(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@

clean: ; $(RM) exmapleMain.o example.o libshared.so libstatic.a basic.exe static.exe shared.exe

重要说明:切勿在删除时使用通配符,您可能会删除一些您不负责任的内容。

至于错误阅读this ,特别是“安装和使用共享库”部分。

关于c++ - 如何使用gcc创建和使用自定义共享库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36304586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com