установка общего объекта без прав root - PullRequest
0 голосов
/ 21 декабря 2011

Я сделал make-файл ниже:

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

1 Ответ

1 голос
/ 21 декабря 2011

Попробуйте сделать последнюю часть:

run:
        LD_LIBRARY_PATH=. ./allocator

С другой стороны:

run:
        export LD_LIBRARY_PATH=.; \
        ./allocator

Проблема в том, что когда у вас есть несколько строк команд для цели, make запускает каждую строку в своей собственной оболочке. Таким образом, переменные окружения, установленные в одной строке (в одной оболочке), не наследуются оболочками, запущенными для других строк. Решение состоит в том, чтобы поместить все это в одну строку (таким образом, это относится к одному экземпляру оболочки), либо записав команду в виде одной строки, либо используя продолжение строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...