我正在尝试编译这个工具。下面是其 Makefile 的开头:
CC = gcc
CFLAGS = -Wall -O2 -D TRACES
DFLAGS = -g -Wall -o0
CPPFLAGS= $(INCLUDES:%=-I %)
LDFLAGS = $(LIBRARIES:%=-L %)
LDLIBS = $(USED_TOOLS:%=-l%)
MY_FILES =
INCLUDE_DIR = ~/include
TOOLBOX_INC = $(INCLUDE_DIR)/tools
TOOLBOX_LIB = $(TOOLBOX_INC)
USED_TOOLS = std_io stringutils
INCLUDES = $(TOOLBOX_INC)
LIBRARIES = $(TOOLBOX_LIB)
我还有 ~/include/tools ,编译后包括 std_io.o、libstd_io.a、stringutils.o 和 libstringutils.a
我收到以下错误:
gcc -L ~/include/tools rank.o counterexample.o -lstd_io -lstringutils -o rank
ld: library not found for -lstd_io
collect2: ld returned 1 exit status
make: *** [rank] Error 1
我不确定内容是否未正确包含,以及为什么找不到库文件。
Edit:原来我不小心在 -L 和 -I 选项之间留了一个空格。另外,我想路径也必须扩展。现在可以使用了,谢谢!
问题是使用波浪号来表示“主目录”。仅当波浪号是单词中第一个非引号字符时,shell 才会进行波浪号扩展。 Makefile 从不进行波形符扩展。因此,在
gcc -L~/include ...
贝壳does not执行波形符扩展,gcc 将在当前目录中查找名为“~/include”的目录。但在
gcc -L ~/include ...
贝壳does执行波形符扩展,gcc 看到
gcc -L /usr/username/include ...
相反,它按预期工作。正确的做法是永远不要对主目录使用波浪号扩展,而只是在 Makefile 中适当地使用 $HOME,例如
INCLUDE_DIR = $$HOME/include
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)