From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <004f01c53e5a$c9819a60$c464a8c0@OLIVEMA> From: "Dmitry Kazimirov" To: "ALT Linux Sisyphus discussion list" References: <20050408132157.GA19188@basalt.office.altlinux.org><01d401c53c3f$727ae4f0$c464a8c0@OLIVEMA> <20050408134734.GA8213@basalt.office.altlinux.org> Subject: =?koi8-r?B?UmU6IFtzaXN5cGh1c10gUmU6INDF0sXWo9fZ18HFzSBsaWJ0b29s?= Date: Mon, 11 Apr 2005 11:53:29 +0600 MIME-Version: 1.0 Content-Type: text/plain; charset="koi8-r" Content-Transfer-Encoding: 8bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2800.1106 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 X-BeenThere: sisyphus@altlinux.ru X-Mailman-Version: 2.1.5 Precedence: list Reply-To: ALT Linux Sisyphus discussion list List-Id: ALT Linux Sisyphus discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Apr 2005 05:53:36 -0000 Archived-At: List-Archive: Прошу прощения, что опять поднимаю эту мутную тему. Просто я письмо написал в пятницу вечером, а потом на сервере питание выключили, и послать я его не смог. Libtool пожевали, теперь нужно выплюнуть. :-) > Извините, libtool не должен подменять программисту голову. Если > APP использует libBASE, извольте написать об этом в Makefile. Так вот очень часто бывает так, что в Makefile о таких зависимостях не пишут. Вот пример: Допустим, в приложении APP некий программист использует обертку BASE++ для обращения к структурам и функциям библиотеки BASE. Интерфейсы классов BASE++ полностью скрывают от программиста эти функции и структуры данных, однако они (эти структуры из BASE) присутствуют в виде членов классов BASE++. Таким образом у модулей, использующих BASE++, сохраняется зависимость от BASE по ABI или даже API - в случае, если функции BASE обернуты inline-методами BASE++). Внимание, вопрос! Как много программистов, использующих BASE++, но ничего не знающих о структурах BASE, догадаются включить библиотеку BASE в зависимости своего приложения? Ответ - немногие. Но об этом может позаботиться libtool. Более того, указывать зависимость от BASE в приложениях, использующих BASE++, было бы неверно. Ведь я использую обертку! Я понадеялся, что она реализована правильно. Да и мало ли что случится с базовой библиотекой... Она может быть переименована, разделена на две и прочее. Хоть мое приложение и зависит от BASE вследствие не самого лучшего способа реализации BASE++, я не должен все время следить, какие там базовые библиотеки использует BASE++. Сегодня одну, завтра две другие. Об этом может позаботиться libtool. Но лучше пусть BASE++ перепишут нормально, чтобы исключить такую косвенную зависимость моего приложения от BASE. А еще лучше пусть сам BASE напишут нормально, чтобы сократить ABI до передачи указателей, а API стандартизировать. Тогда у авторов BASE++ почти не будет шансов неправильно спроектировать свою библиотеку. Однако! Все это пережевывание libtool яйца выеденного не стоит. Можно приводить много примеров, для которых имеет смысл оставлять файлы *.la, но польза от них перечеркивается практической выгодой в сокращении трафика на выкачивании пакетов по лишним зависимостям. И уж однозначно нормальные приложения не должны требовать присутствия файлов *.la. Можно включать файлы *.la, а лучше, конечно, их не включать, но вот требовать их присутсвия никак нельзя. И требует эти файлы, заметьте, не libtool, на который тут незаслуженно наехали, а извращенные скрипты для построения отдельно взятого приложения. Или даже не отдельно взятого, а (о, ужас) многих приложений KDE. Вот для них и надо найти "правильную замену". :-)