用于从现有文件创build(.so)文件的makefile

用于从现有文件创build(.so)文件的makefile,第1张

概述用于现有文件创build(.so)文件的makefile

我有4个文件: 1.c , 1.h , 2.c , 2.h 。 我需要一个makefile,它将从这4个文件中创build一个dynamic库(.so)。 我试图写一个像这样的makefile:

library.so:1.c 1.h 2.c 2.h

但它没有工作。 如果有人帮助我,谢谢。

GCC选项的共享和-WI共享区别

链接到共享库linux

LD_PRELOAD即使在unsetenv(“LD_PRELOAD”)之后也会影响新的子项

如何使用waf来构build共享库?

如何dynamic加载我自己的库,并调用其中的方法?

内存仍然可以修复的错误,但为什么?

在Ubuntu中查找Boost库

使用libpcsclite进行错误编译(未定义)

NUMA机器上共享库的瓶颈

Dumpbin.exe for linux来查看导入

就像是

CC=gcc CFLAGS= -Wall -g -O -fPIC RM= rm -f .PHONY: all clean all: library.so clean: $(RM) *.o *.so library.so: 1.o 2.o $(link.c) -shared $< -o $@ 1.o: 1.c 1.h 2.h 2.o: 2.c 1.h 2.h

但这是未经测试的! 我假设linux使用GNU make ,而一个只包含你的库的源代码的目录(使用上面的Makefile ),这可能是一个不好的做法 – 你可能想要一个测试用例 – (你可以有一个特殊的Makefile规则%.pic.o取决于%.c等…)

提示:使用make -p来理解内建规则。 然后make --trace或( 重制 ) remake -x来了解一些make正在做的事情。

另请参阅Drepper的论文:如何编写共享库 , GNU make的文档 , 程序库HowTo , 这个答案 ,…

最简单的方法是:

CXXFLAGS += -fPIC CXXFLAGS += -O3 x.so: 1.o 2.o $(link.cc) -shared $^ $(LOADliBS) $(LDliBS) -o $@

略高一些:

CC = gcc FLAGS = # -std=gnu99 -Iinclude CFLAGS = -fPIC -g #-pedantic -Wall -Wextra -ggdb3 LDFLAGS = -shared DEBUGFLAGS = -O0 -D _DEBUG RELEASEFLAGS = -O2 -D NDEBUG -combine -fwhole-program TARGET = example.so SOURCES = $(wildcard *.c) headerS = $(wildcard *.h) OBJECTS = $(SOURCES:.c=.o) all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $(FLAGS) $(CFLAGS) $(DEBUGFLAGS) -o $(TARGET) $(OBJECTS)

CC = gcc # C compiler CFLAGS = -fPIC -Wall -Wextra -g # C flags LDFLAGS = -shared # linking flags RM = rm -f # rm command TARGET_liB = sh_main.so # target lib SRCS = add.c sub.c main.c # source file DEPS = header.h # header file OBJs = $(SRCS:.c=.o) # object file .PHONY: all all: ${TARGET_liB} $(TARGET_liB): $(OBJs) $(CC) ${LDFLAGS} -o $@ $^ # -o $@ says,put the output of the compilation in the file named on the left sIDe of the : $(SRCS:.c=.d):%.d:%.c $(CC) $(CFLAGS) -MM $< >$@ # the $< is the first item in the dependencIEs List,and the CFLAGS macro is defined as above include $(SRCS:.c=.d) .PHONY: clean clean: -${RM} ${TARGET_liB} ${OBJs} $(SRCS:.c=.d)

共享库创建成功后。 我们需要安装它。


成为root用户。


将共享库复制到标准目录“ / usr / lib ”中。


运行ldcofig命令。

用共享库重新编译你的.c文件。 root @ admin:〜/ C / Sharedlibrary#gcc -c main.c root @ admin:〜/ C / Sharedlibrary#gcc -o main main.o sh_main.so

root @ admin:〜/ C / Sharedlibrary# ldd main

注意:就我而言。


main.c:主要的C文件


sh_main.so:共享库。

总结

以上是内存溢出为你收集整理的用于从现有文件创build(.so)文件的makefile全部内容,希望文章能够帮你解决用于从现有文件创build(.so)文件的makefile所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1272171.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存