Вопрос к знатокам
От: kov_serg Россия  
Дата: 15.03.16 21:46
Оценка:
Стоит ubuntu 14.04 LTS 64 всё нормально работает.

Проблемма возникла на ровном месте:
Было так запускаю файл aapt (из android sdk) и он пишет не могу найти libc++.so

Начинаю разбираться почему на одной машине работает на другой нет.
На первой файл лежит просто в директории пользователя
на другой смонтирован в папку командой mount --bind

Команда strace ./aapt 2>log
Показывает очень забавный результат.
В первом случае происходит запуск aapt и поиск библиотек по разным путям рядом с исполняемым файлом.
В результате находит рядом с собой папку lib и там нужные либы.
НО! Во втором происходит странное — вместо поиска рядом ищет в корне файловой системы:

[spoiler]

Рабочий вариант
execve("./aapt", ["./aapt"], [/* 78 vars */]) = 0
[ Process PID=3055 runs in 32 bit mode. ]
brk(0)                                  = 0xfffffffff81cf000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7615000
readlink("/proc/self/exe", "/home/user/bin/android-sdk-linux"..., 4096) = 56
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7614000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/home/user/bin/android-sdk-linux/build-tools/23.0.2/../lib/tls/i686/sse2/cmov/libc++.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/home/user/bin/android-sdk-linux/build-tools/23.0.2/../lib/tls/i686/sse2/cmov", 0xffefd490) = -1 ENOENT (No such file or directory)
open("/home/user/bin/android-sdk-linux/build-tools/23.0.2/../lib/tls/i686/sse2/libc++.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/home/user/bin/android-sdk-linux/build-tools/23.0.2/../lib/tls/i686/sse2", 0xffefd490) = -1 ENOENT (No such file or directory)
open("/home/user/bin/android-sdk-linux/build-tools/23.0.2/../lib/tls/i686/cmov/libc++.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
...
open("/home/user/bin/android-sdk-linux/build-tools/23.0.2/lib/libc++.so", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0\0\0\0004\0\0\0"..., 512) = 512
...


На другой машине где файлы андройда смонтированы и не находит
execve("./aapt", ["./aapt"], [/* 40 vars */]) = 0
[ Process PID=3797 runs in 32 bit mode. ]
brk(0)                                  = 0xfffffffff825f000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff76e2000
readlink("/proc/self/exe", "/build-tools/23.0.2/aapt", 4096) = 24
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/build-tools/23.0.2/../lib/tls/i686/sse2/cmov/libc++.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/build-tools/23.0.2/../lib/tls/i686/sse2/cmov", 0xffc0ab40) = -1 ENOENT (No such file or directory)
... еще несколько десятков вариантов безуспешного поиска
stat64("/build-tools/23.0.2/lib", 0xffc0ab40) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=133265, ...}) = 0
mmap2(NULL, 133265, PROT_READ, MAP_PRIVATE, 3, 0) = 0xfffffffff76c1000
close(3)
...

ищет в корне /build-tools. виноват скорее всего вызов readlink хотя дальше не копал.

[/spoiler]

Добавление LD_LIBRARY_PATH=lib помогает, но остаётся осадок.
Как linux убедить не рыться там где не надо?

Никто с таким не сталкивался?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.