linux - 带有静态和共享库的 Makefile
问题描述
我从创建 Makefile 开始。我编写了简单的 Makefile,它创建了两个库,静态和动态并用于编译可执行文件。程序运行的文件位于单独的文件夹中:src 中的 *.c,include 中的 *.h,lib 中的 *.a 和 *.so 以及 bin 中的可执行文件。其余的都在 makefile 文件夹中。我的 Makefile 创建所有文件但找不到文件。我在 gcc 中使用 VPATH 和 -L。但那是行不通的。我正在开发 Ubuntu 20.04 LTS。感谢所有帮助。
vpath %.c src
vpath %.h include
vpath %.a lib
vpath %.so lib
%.o: %.c
gcc -c $<
%: %.o
gcc -o ./bin/$@ $^ -L./lib -I./bin
libj%.a: %j.o
ar rs ./lib/$@ $^
lib%r.so: p%.o
gcc -shared -o ./lib/$@ $^ -L./lib
prog: prog.o libjp.a libgr.so
prog.o: prog.c libgr.h libjp.h
libjp.a: pj.o pp.o
pj.o: pj.c
pp.o: pp.c
libgr.so: pg.o pr.o
pg.o: pg.c
pr.o: pr.c
解决方案
我不明白您所说的“在哪个文件夹中”是什么意思,您必须在运行程序之前完成您的外壳程序。
所以,如果你运行这个:
$ make
$ ./bin/prog
你得到一个错误,你应该使用这个:
$ make
$ export LD_LIBRARY_PATH=$(pwd)/lib
$ ./bin/prog
不要像我在评论中提到的那样将设置放在 makefile中。LD_LIBRARY_PATH
推荐阅读
- netlogo - NetLogo:使用 patch-own 变量会给出错误消息
- r - 如何在r中读取未格式化的txt文件
- python - 正则表达式捕获任何超过 4 位数字之前的重叠匹配
- sql - 如何查询非规范化表并在结果集中获取关联数据?
- docker - 在 Visual Studio 2017 中的 Docker 中调试 ASP NET Core 2 错误
- serialization - Kafka Producer-Consumer 无法生产/消费 avro 数据
- keras - 对 keras.layers.RNN 中时间步长和输出形状的概念感到困惑
- android - 从用户发送 FCM 推送到用户
- javascript - Array.length 在 for 循环中未产生预期结果
- c# - 不使用 HttpContext 获取 asp.net 网站的端口