Loading... 今天在使用 `make` 编译 luafilesystem出现了以下问题 ``` make: Nothing to be done for 'lib'. ``` 意思就是 `make` 没有执行任何编译操作,它可能认为所有目标文件都已经是最新的了 这个问题一般有两个原因引起 1. **已经是最新的了:** `make` 会根据源文件和目标文件的时间戳来决定是否需要重新编译 2. **Makefile 配置问题:** `Makefile` 中的编译规则可能没有正确处理 `CFLAGS` 或没有正确指定编译目标 #### 解决方法 ##### 1. 强制重新编译 最简单的办法就是清理旧的编译文件,然后重新编译 ```bash make clean make CFLAGS="-I/usr/local/openresty/luajit/include/luajit-2.1 -fPIC" ``` `make clean` 会删除已经编译的文件( `.o` 或 `.so` 文件),然后再执行 `make`,重新编译。 ##### 2. 检查 Makefile 配置 如果执行 `make clean` 后问题还是有问题,那有可能就是是 `Makefile` 中的配置存在问题,导致 `make` 没有正确地识别到需要编译的文件 查看 `Makefile` 中的编译规则,确保 `CFLAGS` 被正确传递给编译器 ```makefile CFLAGS += -fPIC ``` 确认编译规则为以下内容 ```makefile src/lfs.o: src/lfs.c gcc $(CFLAGS) -c src/lfs.c -o src/lfs.o ``` 这样,`gcc` 会用 `CFLAGS` 中的选项进行编译,如果 `Makefile` 配置有问题的话就可能无法识别出需要重新编译的文件 ##### 3. 手动编译源文件 如果上面两种方法都没用,可以尝试手动编译源文件,确认编译器是否能够正确地生成 .o文件,链接成共享库 .so 编译源文件: ```bash gcc -I/usr/local/openresty/luajit/include/luajit-2.1 -fPIC -c src/lfs.c -o src/lfs.o ``` 如果没问题就将 `.o` 文件链接为 `.so` 文件即可 ```bash gcc -shared -o src/lfs.so src/lfs.o ``` Last modification:April 25, 2025 © Allow specification reprint Support Appreciate the author Like 如果觉得我的文章对你有用,请随意赞赏