ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [Comm] Компоновка с STL в gcc3
@ 2003-04-14 10:41 Прокопьев Евгений
  2003-04-14 12:12 ` [Comm] " Sergey Vlasov
  0 siblings, 1 reply; 6+ messages in thread
From: Прокопьев Евгений @ 2003-04-14 10:41 UTC (permalink / raw)
  To: community

Здравствуйте!

Был проект, компилировавшийся без проблем в gcc2 от ALM 2.0. Теперь 
компиляция тоже проходит без проблем, а при компоновке я получаю следующее:

$ make
g++    -c -o requester.o requester.cpp
g++    -c -o serial.o serial.cpp
g++    -c -o sulim.o sulim.cpp
gcc  -o requester requester.o serial.o sulim.o xmlconfig/XMLConfig.o 
-lstdc++ -lexpat
sulim.o: In function `std::basic_string<unsigned char, 
std::char_traits<unsigned char>, std::allocator<unsigned char> 
 >::find(unsigned char const*, unsigned) const':
sulim.o(.gnu.linkonce.t._ZNKSbIhSt11char_traitsIhESaIhEE4findEPKhj+0xd): 
undefined reference to `std::char_traits<unsigned char>::length(unsigned 
char const*)'
sulim.o: In function `std::basic_string<unsigned char, 
std::char_traits<unsigned char>, std::allocator<unsigned char> 
 >::find(unsigned char const*, unsigned, unsigned) const':
sulim.o(.gnu.linkonce.t._ZNKSbIhSt11char_traitsIhESaIhEE4findEPKhjj+0x4c): 
undefined reference to `std::char_traits<unsigned 
char>::compare(unsigned char const*, unsigned char const*, unsigned)'
...
collect2: ld returned 1 exit status
make: *** [requester] Ошибка 1

Куда копать?

-- 
С уважением, Прокопьев Евгений



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Comm] Re: Компоновка с STL в gcc3
  2003-04-14 10:41 [Comm] Компоновка с STL в gcc3 Прокопьев Евгений
@ 2003-04-14 12:12 ` Sergey Vlasov
  2003-04-14 12:52   ` Прокопьев Евгений
  0 siblings, 1 reply; 6+ messages in thread
From: Sergey Vlasov @ 2003-04-14 12:12 UTC (permalink / raw)
  To: community

On Mon, 14 Apr 2003 14:41:16 +0400
Прокопьев Евгений <john@rmts.donpac.ru> wrote:

> Был проект, компилировавшийся без проблем в gcc2 от ALM 2.0. Теперь 
> компиляция тоже проходит без проблем, а при компоновке я получаю следующее:
> 
> $ make
> g++    -c -o requester.o requester.cpp
> g++    -c -o serial.o serial.cpp
> g++    -c -o sulim.o sulim.cpp
> gcc  -o requester requester.o serial.o sulim.o xmlconfig/XMLConfig.o 
> -lstdc++ -lexpat
> sulim.o: In function `std::basic_string<unsigned char, 
> std::char_traits<unsigned char>, std::allocator<unsigned char> 
>  >::find(unsigned char const*, unsigned) const':
> sulim.o(.gnu.linkonce.t._ZNKSbIhSt11char_traitsIhESaIhEE4findEPKhj+0xd): 
> undefined reference to `std::char_traits<unsigned char>::length(unsigned 
> char const*)'
> sulim.o: In function `std::basic_string<unsigned char, 
> std::char_traits<unsigned char>, std::allocator<unsigned char> 
>  >::find(unsigned char const*, unsigned, unsigned) const':
> sulim.o(.gnu.linkonce.t._ZNKSbIhSt11char_traitsIhESaIhEE4findEPKhjj+0x4c): 
> undefined reference to `std::char_traits<unsigned 
> char>::compare(unsigned char const*, unsigned char const*, unsigned)'
> ...
> collect2: ld returned 1 exit status
> make: *** [requester] Ошибка 1

А если при сборке вызывать тоже g++, а не gcc?


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Comm] Re: Компоновка с STL в gcc3
  2003-04-14 12:12 ` [Comm] " Sergey Vlasov
@ 2003-04-14 12:52   ` Прокопьев Евгений
  2003-04-14 13:25     ` Sergey Vlasov
  0 siblings, 1 reply; 6+ messages in thread
From: Прокопьев Евгений @ 2003-04-14 12:52 UTC (permalink / raw)
  To: community

> А если при сборке вызывать тоже g++, а не gcc?

$ make clean
rm -f *.o requester
$ make
g++    -c -o requester.o requester.cpp
g++    -c -o serial.o serial.cpp
g++    -c -o sulim.o sulim.cpp
g++  -o requester requester.o serial.o sulim.o xmlconfig/XMLConfig.o 
-lstdc++ -lexpat
sulim.o: In function `std::basic_string<unsigned char, 
std::char_traits<unsigned char>, std::allocator<unsigned char> 
 >::find(unsigned char const*, unsigned) const':
sulim.o(.gnu.linkonce.t._ZNKSbIhSt11char_traitsIhESaIhEE4findEPKhj+0xd): 
undefined reference to `std::char_traits<unsigned char>::length(unsigned 
char const*)'
sulim.o: In function `std::basic_string<unsigned char, 
std::char_traits<unsigned char>, std::allocator<unsigned char> 
 >::find(unsigned char const*, unsigned, unsigned) const':
sulim.o(.gnu.linkonce.t._ZNKSbIhSt11char_traitsIhESaIhEE4findEPKhjj+0x4c): 
undefined reference to `std::char_traits<unsigned 
char>::compare(unsigned char const*, unsigned char const*, unsigned)'
sulim.o: In function `std::basic_string<unsigned char, 
std::char_traits<unsigned char>, std::allocator<unsigned char> 
 >::_Rep::_M_clone(std::allocator<unsigned char> const&, unsigned)':
sulim.o(.gnu.linkonce.t._ZNSbIhSt11char_traitsIhESaIhEE4_Rep8_M_cloneERKS1_j+0xaa): 
undefined reference to `std::char_traits<unsigned char>::copy(unsigned 
char*, unsigned char const*, unsigned)'
sulim.o: In function `std::basic_string<unsigned char, 
std::char_traits<unsigned char>, std::allocator<unsigned char> 
 >::_M_mutate(unsigned, unsigned, unsigned)':
sulim.o(.gnu.linkonce.t._ZNSbIhSt11char_traitsIhESaIhEE9_M_mutateEjjj+0x143): 
undefined reference to `std::char_traits<unsigned char>::copy(unsigned 
char*, unsigned char const*, unsigned)'
sulim.o(.gnu.linkonce.t._ZNSbIhSt11char_traitsIhESaIhEE9_M_mutateEjjj+0x170): 
undefined reference to `std::char_traits<unsigned char>::copy(unsigned 
char*, unsigned char const*, unsigned)'
sulim.o(.gnu.linkonce.t._ZNSbIhSt11char_traitsIhESaIhEE9_M_mutateEjjj+0x283): 
undefined reference to `std::char_traits<unsigned char>::move(unsigned 
char*, unsigned char const*, unsigned)'
sulim.o: In function `std::basic_string<unsigned char, 
std::char_traits<unsigned char>, std::allocator<unsigned char> 
 >::_S_copy_chars(unsigned char*, unsigned char const*, unsigned char 
const*)':
sulim.o(.gnu.linkonce.t._ZNSbIhSt11char_traitsIhESaIhEE13_S_copy_charsEPhPKhS5_+0x1b): 
undefined reference to `std::char_traits<unsigned char>::copy(unsigned 
char*, unsigned char const*, unsigned)'
collect2: ld returned 1 exit status
make: *** [requester] Ошибка 1

-- 
С уважением, Прокопьев Евгений



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Comm] Re: Компоновка с STL в gcc3
  2003-04-14 12:52   ` Прокопьев Евгений
@ 2003-04-14 13:25     ` Sergey Vlasov
  2003-04-15  4:13       ` Прокопьев Евгений
  0 siblings, 1 reply; 6+ messages in thread
From: Sergey Vlasov @ 2003-04-14 13:25 UTC (permalink / raw)
  To: community

On Mon, 14 Apr 2003 16:52:46 +0400
Прокопьев Евгений <john@rmts.donpac.ru> wrote:

> sulim.o: In function `std::basic_string<unsigned char, 
> std::char_traits<unsigned char>, std::allocator<unsigned char> 
>  >::find(unsigned char const*, unsigned) const':
> sulim.o(.gnu.linkonce.t._ZNKSbIhSt11char_traitsIhESaIhEE4findEPKhj+0xd): 
> undefined reference to `std::char_traits<unsigned char>::length(unsigned 
> char const*)'
[skip]

А, так вы пытаетесь работать с std::basic_string<unsigned char>.

Надо делать специализацию std::char_traits<unsigned char>.  В
стандартном C++ <string> должен определять специализации только для
char и wchar_t - что он и делает в gcc3.  Для общего случая
определяется только пустышка без реализации.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Comm] Re: Компоновка с STL в gcc3
  2003-04-14 13:25     ` Sergey Vlasov
@ 2003-04-15  4:13       ` Прокопьев Евгений
  2003-04-15 11:42         ` Sergey Vlasov
  0 siblings, 1 reply; 6+ messages in thread
From: Прокопьев Евгений @ 2003-04-15  4:13 UTC (permalink / raw)
  To: community

> А, так вы пытаетесь работать с std::basic_string<unsigned char>.
> 
> Надо делать специализацию std::char_traits<unsigned char>.  В
> стандартном C++ <string> должен определять специализации только для
> char и wchar_t - что он и делает в gcc3.  Для общего случая
> определяется только пустышка без реализации.


$ make clean
rm -f *.o requester
$ make
g++    -c -o requester.o requester.cpp
g++    -c -o serial.o serial.cpp
g++    -c -o sulim.o sulim.cpp
sulim.cpp: In member function `void sulim_device::check(byte*, byte*, 
byte*)':
sulim.cpp:70: no matching function for call to 
`std::char_traits<byte>::append(byte*, int)'
sulim.cpp:72: no matching function for call to 
`std::char_traits<byte>::find(byte*&)'
/usr/include/c++/3.2.1/bits/char_traits.h:79: candidates are: static 
const _CharT* std::char_traits<_CharT>::find(const _CharT*, unsigned 
int, const _CharT&) [with _CharT = byte]
sulim.cpp:72: `struct std::char_traits<byte>' has no member named `npos'
sulim.cpp:73: no matching function for call to 
`std::char_traits<byte>::find(byte*&)'
/usr/include/c++/3.2.1/bits/char_traits.h:79: candidates are: static 
const _CharT* std::char_traits<_CharT>::find(const _CharT*, unsigned 
int, const _CharT&) [with _CharT = byte]
sulim.cpp:73: `struct std::char_traits<byte>' has no member named `npos'
sulim.cpp:78: no matching function for call to 
`std::char_traits<byte>::length()'
/usr/include/c++/3.2.1/bits/char_traits.h:76: candidates are: static 
size_t std::char_traits<_CharT>::length(const _CharT*) [with _CharT = byte]
sulim.cpp:79: no match for `byte_queue& [unsigned int&]' operator
sulim.cpp:84: no matching function for call to 
`std::char_traits<byte>::find(byte*&)'
/usr/include/c++/3.2.1/bits/char_traits.h:79: candidates are: static 
const _CharT* std::char_traits<_CharT>::find(const _CharT*, unsigned 
int, const _CharT&) [with _CharT = byte]
sulim.cpp:84: `struct std::char_traits<byte>' has no member named `npos'
make: *** [sulim.o] Ошибка 1

Это случилось после того, как basic_string<unsigned char> я заменил на 
char_traits<unsigned char>.

Собственно вопрос: где искать реализацию для char, чтобы методом 
копировать/вставить/заменить сделать аналог (как-то все это не 
по-человечьи), и где читать:

a) про реализацию стандарта C++ в gcc3
б) про саму стандартную библиотеку C++ (по C маны есть, а тут не 
предусмотрели :( )

-- 
С уважением, Прокопьев Евгений



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Comm] Re: Компоновка с STL в gcc3
  2003-04-15  4:13       ` Прокопьев Евгений
@ 2003-04-15 11:42         ` Sergey Vlasov
  0 siblings, 0 replies; 6+ messages in thread
From: Sergey Vlasov @ 2003-04-15 11:42 UTC (permalink / raw)
  To: community

On Tue, 15 Apr 2003 08:13:01 +0400
Прокопьев Евгений <john@rmts.donpac.ru> wrote:

> > А, так вы пытаетесь работать с std::basic_string<unsigned char>.
> > 
> > Надо делать специализацию std::char_traits<unsigned char>.  В
> > стандартном C++ <string> должен определять специализации только для
> > char и wchar_t - что он и делает в gcc3.  Для общего случая
> > определяется только пустышка без реализации.

[куча ошибок поскипана]

> Это случилось после того, как basic_string<unsigned char> я заменил на 
> char_traits<unsigned char>.

Так менять нельзя. Нужно написать где-то в своём .h специализацию
std::char_traits<unsigned char>; лучше там же определить и typedef на
std::basic_string<unsigned char>, чтобы нельзя было им пользоваться,
не объявив эту специализацию.

Т.е.

#include <string>

template <>
struct std::char_traits<unsigned char>
{
   ...
};

typedef std::basic_string<unsigned char> my_super_cool_string;

Можно явно указывать свой класс traits вторым параметром шаблона
std::basic_string.

> Собственно вопрос: где искать реализацию для char, чтобы методом 
> копировать/вставить/заменить сделать аналог (как-то все это не 
> по-человечьи),

/usr/include/c++/3.2.1/bits/char_traits.h

> и где читать:
> 
> a) про реализацию стандарта C++ в gcc3
> б) про саму стандартную библиотеку C++ (по C маны есть, а тут не 
> предусмотрели :( )

/usr/share/doc/gcc-3.2/libstdc++


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2003-04-15 11:42 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-04-14 10:41 [Comm] Компоновка с STL в gcc3 Прокопьев Евгений
2003-04-14 12:12 ` [Comm] " Sergey Vlasov
2003-04-14 12:52   ` Прокопьев Евгений
2003-04-14 13:25     ` Sergey Vlasov
2003-04-15  4:13       ` Прокопьев Евгений
2003-04-15 11:42         ` Sergey Vlasov

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git