解决 编译时产生的 Nothing to be done for 'lib' 问题
今天在使用 make
编译 luafilesystem出现了以下问题
1 | make: Nothing to be done for 'lib'. |
意思就是 make
没有执行任何编译操作,它可能认为所有目标文件都已经是最新的了
这个问题一般有两个原因引起
- 已经是最新的了:
make
会根据源文件和目标文件的时间戳来决定是否需要重新编译 - Makefile 配置问题:
Makefile
中的编译规则可能没有正确处理CFLAGS
或没有正确指定编译目标
解决方法
1. 强制重新编译
最简单的办法就是清理旧的编译文件,然后重新编译
1 | make clean |
make clean
会删除已经编译的文件( .o
或 .so
文件),然后再执行 make
,重新编译。
2. 检查 Makefile 配置
如果执行 make clean
后问题还是有问题,那有可能就是是 Makefile
中的配置存在问题,导致 make
没有正确地识别到需要编译的文件
查看 Makefile
中的编译规则,确保 CFLAGS
被正确传递给编译器
1 | CFLAGS += -fPIC |
确认编译规则为以下内容
1 | src/lfs.o: src/lfs.c |
这样,gcc
会用 CFLAGS
中的选项进行编译,如果 Makefile
配置有问题的话就可能无法识别出需要重新编译的文件
3. 手动编译源文件
如果上面两种方法都没用,可以尝试手动编译源文件,确认编译器是否能够正确地生成 .o文件,链接成共享库 .so
编译源文件:
1 | gcc -I/usr/local/openresty/luajit/include/luajit-2.1 -fPIC -c src/lfs.c -o src/lfs.o |
如果没问题就将 .o
文件链接为 .so
文件即可
1 | gcc -shared -o src/lfs.so src/lfs.o |
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Comments