Не нужно, а можно. :) Иногда приходится писать и платформу.
На мой взгляд, это нецелевое использование, и подлежит осуждению всем прогрессивным обществом.
Где зафиксировано, что в SONAME пишется libname.so.${version_major}, и только оно?
Достаточно /usr/lib/libsomething.so.${version}, чтобы случайно не загрузиться, например, с /usr/local/lib/libsomething.so.${version}
Это ерунда, нужно правильно rpath выставлять. SONAME не трожьте.
Причем _здесь_ SONAME? Как вам поможет -rpath в "-L/libdir/ -Wl,-rpath /libdir -lsmth", если /libdir/libsmth.so указывает на неправильную библиотеку? Опять симлинки будем расставлять?
libtool на Linux иногда подставляет это открытым текстом вместо -L/some/libdir/ -Wl,-rpath /some/libdir -lsomething.
Кроме того, это работает на Linux, даже если libsomething.so указывает на неверную libsomething.so.${version}
libtool делает все правильно,
Конечно. :)
а вы видимо путаете симлинк .so -> .so.N с SONAME.
Где это вам увиделось? :)
Автотулз как раз и сделаны в таком виде, чтобы автор не думал о портабельности.
_Должны_ быть сделаны. :)
Почему невозможно? -I/usr/local/include всегда можно задать руками, а от досадных клэшей /usr/include <-> /usr/local/include это спасет.
Даю вводную:
Библиотека A версии Na лежит в /usr. Библиотека A версии Ma лежит в /usr/local. Библиотека B версии Nb лежит в /usr. Библиотека B версии Mb лежит в /usr/local.
Вы собираете программу C с библиоткой A версии Na и библиотекой B версии Mb. При том, что один и тот же файл программы C использует одновременно include-файлы от библиотек A и B.
Каким образом тут помогут ключи -I/usr/local/include?
Лишних слов много :), что неудивительно.
Правильный вопрос такой: что делать, если нужно включить /usr/include/A.h и /usr/local/include/B.h,
если есть /usr/local/include/A.h и /usr/include/B.h других версий?
В таких случаях делается, например,
( mkdir -p .include/ && cd .include/ && ln -s /usr/include/A.h . && ln -s /usr/local/include/B.h . )
gcc -I ./.include ....
Как правильно после этого запустить ld с libA.so.N и libB.so.M, видимо, сами знаете, если в /usr/lib:
libA.so -> libA.so.N
libA.so.N -> libA.so.N.x
libB.so -> libB.so.N
libB.so.N -> libB.so.N.y
а в /usr/local/lib:
libA.so -> libA.so.M
libA.so.M -> libA.so.M.w
libB.so -> libB.so.M
libB.so.M -> libB.so.M.z
Следующий правильный вопрос такой:
что делать, если в /libdir/ есть libA.so.N и libA.so.M, и libA.so -> libA.so.M, а нам нужна именно libA.so.N?