From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <4353B671.20400@altlinux.org> Date: Mon, 17 Oct 2005 18:34:25 +0400 From: Alexey Rusakov Organization: RingRows User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.10) Gecko/20050715 Thunderbird/1.0.6 Mnenhy/0.7 MIME-Version: 1.0 To: ALT Devel discussion list Subject: Re: [devel] Re: C++ ABI References: <20051017000354.GS7934@solemn.turbinal.org> <43532CDC.3070105@altlinux.org> <20051017131222.GV7934@solemn.turbinal.org> In-Reply-To: <20051017131222.GV7934@solemn.turbinal.org> Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 8bit X-Virus-Scanned: by AMaViS 0.3.12pre8 X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: ALT Devel discussion list List-Id: ALT Devel discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Oct 2005 14:34:29 -0000 Archived-At: List-Archive: List-Post: On 17.10.2005 17:12, Alexey Tourbin wrote: > В библиотеке libstdc++ есть шаблоны. Они > компилируются в саму эту библиотеку, или остаются исключительно в > хедерах? > Только в хедерах. Кстати, по этой причине реализацию шаблонных функций и методов шаблонных классов нельзя класть в файлы .cc/.cpp/.cxx . Эти реализации будут доступны только в этих самых файлах и нигде больше. >> Если грубо, то на сегодня последний момент, когда создаётся бинарный >> код, соответствующий шаблону - это компиляция точки инстанцирования >> шаблона. >> > Что это означает? Если какая-то библиотека содержит шаблон, то > бинарного кода в самом библиотеке нет, а он будет порождаться каждый раз > при инстанцировании? Да. > То есть все приложения, которые инстанцируют > шаблон, получат библиотечный "довесок"? > Если под "довеском" понимается код, реализующий кокретную специализацию шаблона, то да. > Вот пример: в хедере содержится определение: > > typedef basic_string string; > > typdef считается инстанцированием, или только алиасом для последющего > инстанцирования? Некоторые компиляторы это считают инстанцированием, кажется. Но бинарный код, соответствующий этой специализации шаблона, всё равно будет генериться каждый раз при компиляции бинарника. А потом линкеры совершают нехилые кульбиты, чтобы избежать duplicate symbols. > Где находится бинарный код класса string: в библиотеке > libstdc++ или же в каждом бинаре, который инстанцирует этот шаблон? > В библиотеке он есть, потому что сама библиотека используется basic_string . Но как экспортируемый символ, basic_string библиотека не предоставляет. > Если я правильно понимаю, то C++ ABI для библиотечных шаблонов как бы > вообще отсутствует, т.к. код шаблонов генерируется при каждом > фактическом инстанцировании. Так? > Так. -- Alexey "Ktirf" Rusakov