我在下面创建了makefile:
CC = gcc
CCFLAGS = -Wall -L. -lall -ldl -g
LIBFLAGS = -shared -fPIC -Wall
SRC = tema4.c
PROGRAM = allocator
LIB = liball.so
LIBSRC = liballoc.c
build:
gcc -fPIC -c liballoc.c
ld -shared -soname liball.so.1 -o liball.so.1.0 -lc liballoc.o
ldconfig -v -n .
ln -sf liball.so.1 liball.so
$(CC) -o $(PROGRAM) $(SRC) $(CCFLAGS)
export LD_LIBRARY_PATH=.
run:
export LD_LIBRARY_PATH=.
./allocator
clean:
rm -f $(PROGRAM) core *~
我运行命令make然后我尝试运行该程序但似乎无法打开共享对象liball.so(没有这样的文件或目录)
我正在使用ubuntu 11.10并且我没有root权限
答案 0 :(得分:1)
尝试制作最后一部分:
run:
LD_LIBRARY_PATH=. ./allocator
可替换地:
run:
export LD_LIBRARY_PATH=.; \
./allocator
问题是,当你有一个目标的多行命令时,make会在自己的shell中运行每一行。因此,在一行(在一个shell中)设置的环境变量不会被为其他行运行的shell继承。解决方案是将所有内容放在一行(因此它转到shell的一个实例),或者将命令作为单行写入,或者使用行继续。