ldd: не может найти библиотеку для xl c скомпилированным двоичным файлом, но мог для скомпилированного двоичного файла gcc на AIX

В (инообесцененной) файловой системе нормального Unix, включая UFS, это - разумное приближение для высказывания каждого файла или каталога, Вы создаете использование один inode. Наличие большого количества файлов в одном каталоге не изменяет это.

Обычные проблемы с подходом, который Вы описываете:

  • файловые системы используют хеши или структуры данных древовидного типа для поисков каталога для ускорения поиска и создания, чем больше файлов Вы имеете в единственном каталоге, тем медленнее это добирается. С хешированием может быть вполне объявлено это замедление, поскольку коллизии происходят.
  • типичные команды Unix испытывают затруднения (конкретно ls сортировка, и расширение шарика оболочки), хотя обычно задолго до замедления файловой системы.
  • поскольку каталог получает новые файлы, больше блоков выделяется, это будет все больше становиться фрагментированным, требуя большего количества диска IO к доступу.

Более современные файловые системы (ext3/4) используют B-дерево как структуры данных для хранения каталогов отсортированными как часть их дисковых данных. Я полагаю, что реализация UFS использует хеширование в оперативной памяти (на основе использования FreeBSD и документации, у меня нет большого прямого опыта с UFS на Linux), поскольку дисковый формат не использует хеши.

Это имеет некоторую хорошую информацию о UFS и ссылки: https://serverfault.com/questions/53416/max-total-files-in-a-directory-in-freebsd-6-ufs

Наиболее вероятный худший случай в какой-то момент, Вы испытаете значимое и когда-либо ухудшающееся замедление при доступе к тому каталогу. Когда это доберется до той точки, это будет утомительно для фиксации (на основе моего опыта со взрывом sendmail очереди).

Я поощряю Вас контролировать (и график) iowait время своей системы и узнавать iotop и slabtop если Вы уже не делаете.

Если возможно, я также предлагаю, чтобы Вы попробовали некоторые простые эксперименты ко времени создание 1 000 файлов в Вашем каталоге кэша и соответствовали этому в пустом каталоге.

2
03.01.2014, 12:14
2 ответа

Я наконец использую этот сценарий для разрешения компиляции:

export CONFIG_SHELL=/opt/freeware/bin/bash
export CONFIG_ENV_ARGS=/opt/freeware/bin/bash
export CC=cc
export CFLAGS="-qmaxmem=16384 -DSYSV -D_AIX -D_AIX32 -D_AIX41 -D_AIX43 -D_AIX51 -D_AIX52 -D_AIX53 -D_AIX61 -D_ALL_SOURCE -DFUNCPROTO=15 -O -I/opt/freeware/include"export CXX=xlC
export CXXFLAGS=$CFLAGS
export F77=xlf
export FFLAGS="-qmaxmem=16384 -O -I/opt/freeware/include"
export LD=ld

export LDFLAGS="-L/opt/freeware/lib64 -L/opt/freeware/lib -Wl,-blibpath:/opt/freeware/lib64:/opt/freeware/lib:/usr/lib:/lib:/opt/freeware/lib/mysql/mysql -Wl,-bmaxdata:0x80000000"

export PATH=/usr/bin:/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/vac/bin:/usr/vacpp/bin:/usr/ccs/bin:/usr/dt/bin:/usr/opt/perl5/bin:/opt/freeware/bin:/opt/freeware/sbin:/usr/local/bin:/usr/lib/instl
make clean
./configure 
--with-modules=mod_tls:mod_sql:mod_sql_mysql:mod_sql_passwd:mod_sftp:mod_sftp_sql 
--without-getopt 
--enable-openssl 
--with-includes=/home/padubois/include3_mysql/zlib/:/home/padubois/include_mysql/mysql/ 
--with-libraries=/opt/freeware/lib/mysql/mysql:/opt/freeware/lib/mysql/mysql/libmysqlclient.a 
--prefix=/local/proftpd/
make

Я неправильно использовал LDFLAG вот важная часть:
-blibpath:/opt/freeware/lib64:/opt/freeware/lib:/usr/lib:/lib:/opt/freeware/lib/mysql/mysql

С Новым годом!

1
27.01.2020, 22:14
  • 1
    Хороший, что Вы нашли его! С Новым годом себя также! –  Jenny D 03.01.2014, 13:00

Отредактируйте 2, я вижу другую строку, это странно:

--with-includes=[...]/opt/freeware/lib/mysql/mysql 

Не был должен это быть /opt/freeware/include/mysql/mysql вместо этого?

Также Вы не добавили /opt/freeware/lib/mysql/mysql к LDFLAGS при компиляции.

Редактирование я вижу одну вещь, которая могла бы объяснить это:

/opt/freeware/lib/mysql/mysql//libmysqlclient.a(libmysqlclient.so.16)

Отметьте дополнительное / там. Я ни в коем случае не эксперт в xl, но он мог бы возможно запутываться этим при использовании той же нотации при компиляции в обоих компиляторах.

(Исходный ответ: От моей неопределенной памяти AIX я полагаю, что Вы хотите добавить путь к переменной среды LIBPATH. )

1
27.01.2020, 22:14
  • 1
    хорошо проблема, это пусто, если бы это - корректный :D –  Kiwy 02.01.2014, 13:12
  • 2
    имени, вероятно, помогло бы, показали ли Вы, каковы параметры командной строки, которые Вы использовали, были. Я ни в коем случае не эксперт в xl компиляторе C, но казалось бы очевидным, что это не связало вещи таким же образом, как gcc сделал. –  Jenny D 02.01.2014, 13:14
  • 3
    хорошо, я буду, как только мне удается вернуть мой файл истории удара-.-' –  Kiwy 02.01.2014, 13:27
  • 4
    Измененный мой ответ на основе Вашего редактирования –  Jenny D 02.01.2014, 13:36
  • 5
    Хорошо теперь это не компилирует еще, также - действительно ли это - ошибка или функция? Я 'll обновляю вопрос. –  Kiwy 02.01.2014, 13:38

Теги

Похожие вопросы