对std::basic_string的未定义引用
undefined reference to std::basic_string
我正在编译我的项目,并看到链接问题
$ 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
我的gcc库中的std::basic_string
符号如下:
$ 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&&)
我该怎么解决这个问题?
--编辑--
在我从compile命令中删除-std=gnu++11
之后,问题得到了修复。字符串16的Chromium库似乎与C++11存在兼容性问题。
您正在尝试使用basic_string<unsigned short, base::string16_char_traits>
,但它不是来自标准库,libstdc++.so
库只包含basic_string<char>
和basic_string<wchar_t>
该专业化必须在您正在使用的某个库中使用,因此您应该找出哪个库并确保正确链接到它。如果您使用-fno-implicit-templates
进行编译,那么您可能需要一个显式实例化。
查找base::string16_char_traits
可能有助于找到实例化的来源。谷歌快速提示它来自Chromium库,所以可能你没有链接到它,或者可能你需要稍后将该库放在链接命令中。
相关文章:
- 编译C++时未定义的引用
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用
- 从 std::string 到 std::array<char,size> 的 memcopy 额外数据是否是一种未定义的行为?
- Cpp 未定义引用 'Apache:: thrift:: transport:: TSocket:: TSocket (std:: string const&, int)'
- 对"cv::String::allocate(unsigned long)"的未定义引用
- C 与stat lib中的std :: string相关的未定义符号
- 对'PreconditionViolatedException::PreconditionViolatedException(std::string const&)'的未定义引用
- 链接webrtc本机时出错,因为未定义对具有std::string的方法的引用
- 对'std::string Helper::ToString<int>(int const&)'的未定义引用
- 错误未定义对"BP::D evice::Create(std::string const&)"的引用
- 'std::string::c_str()'如何返回不会导致内存泄漏或未定义的 C 字符串内容的 C 字符串?
- 未定义对“GradeBook::GradeBook(std::string)”的引用
- 标识符[string-value]未定义
- 未定义引用 'htmlcxx::HTML::P arserDom::p arseTree(std::string const&)'
- 错误:未定义对"cv::imread(std::string const&, int)"的引用
- 对 'json11::Json::d ump(std::string&) const' collect2 的未定义引用:错误:ld 返回 1 个退出状态
- 对 std::哈希<string>的未定义引用
- 未定义的引用 cv::imread(std::string const&, int)
- 使用c_str()时std::string的未定义行为
- 对矢量<String> G++ 链接器错误的未定义引用