我最近在 linux 上使用 ncurses 用 C 语言编写了一个扫雷器实现;在我的电脑上一切正常,但如果我尝试将编译后的二进制文件提供给其他人,他们经常会收到错误消息:
error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
如果我让他们重新编译代码,一切都很好。通过环顾四周,我发现这是 libtinfo 和 libncurses 之间分离的问题。它可以通过制作几个 simlink 来解决,但它只有在用户具有 root 权限时才可行。
截至这里(和其他来源),http://www.cyberspice.org.uk/blog/2009/12/24/tinfo-about-dash/,似乎这是一个可以通过编写代码来解决的问题以不同的方式或可能以不同的方式编译。我宁愿能够以这种方式解决问题,也不愿强迫人们制作 simlink。
任何指向正确方向的指示以了解如何解决我的问题?如果需要,我可以添加任何代码或细节,但发布所有内容似乎有点过头了,所以请告诉我可以添加什么(如果需要)以更好地理解问题。
我现在唯一发布的是makefile:
CC=gcc -std=gnu89 -pedantic -Wall -Wno-unused-but-set-variable
CFLAGS=-c -g
LDFLAGS=-lncurses
NAME=campo_ex
OBJECTS=error.o interface.o utilities.o main.o grid.o
DEBUG_NAME=debug
DEBUG_OBJECTS=error.o interface.o utilities.o debug.o
$(NAME): $(OBJECTS)
$(CC) -o $(NAME) $(OBJECTS) $(LDFLAGS)
main.o: main.c interface.h grid.h
$(CC) $(CFLAGS) main.c
debug.o: debug.c interface.h
$(CC) $(CFLAGS) debug.c
error.o: error.c error.h
$(CC) $(CFLAGS) error.c
utilities.o: utilities.c utilities.h
$(CC) $(CFLAGS) utilities.c
interface.o: interface.c interface.h error.h utilities.h
$(CC) $(CFLAGS) interface.c
grid.o: grid.c grid.h error.h
$(CC) $(CFLAGS) grid.c
.PHONY: clean
clean:
@-rm -f $(OBJECTS) $(NAME) $(DEBUG_NAME) $(DEBUG_OBJECTS)
.PHONY: debug
debug: $(DEBUG_OBJECTS)
$(CC) -o $(DEBUG_NAME) $(DEBUG_OBJECTS) $(LDFLAGS)