undefined reference to std::basic_string
Je compile mon projet et voir lien problème
$ g++ -Wl,-z,now -Wl,-z,relro -pthread -Wl,-z,noexecstack -fPIC -Wl,--threads -Wl,--thread-count=4 -B../../third_party/gold -L. -Wl,-uIsHeapProfilerRunning,-uProfilerStart -Wl,-u_Z21InitialMallocHook_NewPKvj,-u_Z22InitialMallocHook_MMapPKvS0_jiiix,-u_Z22InitialMallocHook_SbrkPKvi -Wl,-u_Z21InitialMallocHook_NewPKvm,-u_Z22InitialMallocHook_MMapPKvS0_miiil,-u_Z22InitialMallocHook_SbrkPKvl -Wl,-u_ZN15HeapLeakChecker12IgnoreObjectEPKv,-u_ZN15HeapLeakChecker14UnIgnoreObjectEPKv -Wl,--icf=none -Wl,-rpath=\$ORIGIN/lib/ -Wl,-rpath-link=lib/ -o cameo -Wl,--start-group obj/cameo/src/runtime/app/cameo.cameo_main.o obj/media/libmedia_sse.a ...(omitted many *.a here) -Wl,--end-group -lX11 -lXcursor -lXrandr -lXrender -lrt -ldl -lgmodule-2.0 -lgobject-2.0 -lgthread-2.0 -lglib-2.0 -lXtst -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lXi -lXcomposite -lasound -lXdamage -lXext -lXfixes -lnss3 -lnssutil3 -lsmime3 -lplds4 -lplc4 -lnspr4 -lgconf-2 -lresolv -ldbus-1 -lcups -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lgnutls -lgcrypt -lz -lpthread -lm -lcrypt -L/lib/x86_64-linux-gnu -lexpat -ludev
/usr/include/c++/4.7/ext/new_allocator.h:110: error: undefined reference to 'std::basic_string<unsigned short, base::string16_char_traits, std::allocator<unsigned short> >::basic_string(std::basic_string<unsigned short, base::string16_char_traits, std::allocator<unsigned short> >&&)'
/usr/include/c++/4.7/bits/stl_construct.h:77: error: undefined reference to 'std::basic_string<unsigned short, base::string16_char_traits, std::allocator<unsigned short> >::basic_string(std::basic_string<unsigned short, base::string16_char_traits, std::allocator<unsigned short> >&&)'
error: ld returned 1 exit status
La std::basic_string
symbole dans mon gcc bibliothèque comme suit:
$ find /usr -name libstdc++.a
/usr/lib/gcc/x86_64-linux-gnu/4.6/32/libstdc++.a
/usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.a
/usr/lib/gcc/x86_64-linux-gnu/4.7/32/libstdc++.a
/usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.a
$ nm -C /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++.a| grep basic_string | grep '&&'
nm: compatibility-debug_list-2.o: no symbols
nm: compatibility-list-2.o: no symbols
nm: compatibility-parallel_list-2.o: no symbols
0000000000000000 W std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::assign(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&&)
0000000000000000 W std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::operator=(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&&)
0000000000000000 W std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&&)
0000000000000000 W std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&&)
0000000000000000 n std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&&)
0000000000000000 W std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string&&)
0000000000000000 W std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string&&)
0000000000000000 n std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string&&)
Comment puis-je résoudre ce problème?
--EDIT--
Résolu le problème après je l'ai enlevé -std=gnu++11
à partir de la compilation de commande. Il semble que le Chrome bibliothèque de base de string16 est d'avoir des problème de compatibilité avec le C++11.
basic_string est un modèle. Q: Avez-vous l'instancier n'importe où dans votre programme? Comment l'utilisez-vous? Vous pouvez couper et coller un exemple de ton code?
Ressemble à un large char question (
Juste cherché mon code, il n'y a pas de
Il devrait être
Il y a des typedefs pour
Ressemble à un large char question (
wchar_t
est utilisé pour l'instanciation).Juste cherché mon code, il n'y a pas de
basic_string
instanciéIl devrait être
std::wstring
, avez-vous #include <string>
?Il y a des typedefs pour
std::basic_string<T>
pour différentes valeurs de T
, chaîne de caractères, wstring, string16 (en c++11), vous devez rechercher pour eux.
OriginalL'auteur Deqing | 2013-07-05
Vous devez vous connecter pour publier un commentaire.
Vous essayez d'utiliser
basic_string<unsigned short, base::string16_char_traits>
mais qui ne viennent pas de la bibliothèque standard, lelibstdc++.so
bibliothèque ne contient quebasic_string<char>
etbasic_string<wchar_t>
Que la spécialisation doit être utilisé dans l'une des bibliothèques que vous utilisez, donc vous devriez vous renseigner et de vous assurer de lien correctement. Si vous êtes à la compilation avec
-fno-implicit-templates
alors vous pourriez avoir besoin d'une instanciation explicite.Il pourrait aider à chercher
base::string16_char_traits
de trouver l'endroit où l'instanciation. Un rapide Google suggère que c'est à partir d'un Chrome de la bibliothèque, peut-être que vous n'êtes pas la liaison, ou peut-être vous avez besoin de mettre la bibliothèque à plus tard dans le lien de commande.Il semble que la bibliothèque est appelée
base
. Mais je vois queobj/base/libbase.a
est déjà inclus dans le g++ linker commande."peut-être que vous avez besoin de mettre la bibliothèque à plus tard dans la commande de liaison." - La bibliothèque doit être indiqué après tous les objets qui en dépendent.
OriginalL'auteur Jonathan Wakely