
export CC=clangexport CXX=clang++export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:$HOME/llvm/projects/libcxxabi/include"sudo apt-get install gitcdgit clone --single-branch --branch master --depth=1 http://llvm.org/git/llvmcd llvm/projects/git clone --single-branch --branch master --depth=1 http://llvm.org/git/libcxxabigit clone --single-branch --branch master --depth=1 http://llvm.org/git/libcxxgit clone --single-branch --branch master --depth=1 http://llvm.org/git/compiler-rtcd ../toolsgit clone --single-branch --branch master --depth=1 http://llvm.org/git/clanggit clone --single-branch --branch master --depth=1 http://llvm.org/git/clang-tools-extra extragit clone --single-branch --branch master --depth=1 http://llvm.org/git/lldgit clone --single-branch --branch master --depth=1 http://llvm.org/git/lldbgit clone --single-branch --branch master --depth=1 http://llvm.org/git/pollysudo apt-get install python-dev libedit-dev libncurses-dev swig libgmp-dev libgmp3-dev dh-autoreconf @R_636_4035@8 @R_636_4035@8-dev cmakecdcd llvm/tools/polly/utilsmkdir -p ~/build-cloogbash checkout_cloog.sh ~/build-cloogmkdir -p ~/build-islbash checkout_isl.sh ~/build-islcd ~/build-isl/./configuremakesudo make installcd ~/build-cloog/./configure --with-isl=systemmakesudo make installcdmkdir build-llvmcd build-llvmbash ../llvm/configure --enable-optimized --disable-assertions --enable-libcpp --enable-jit --enable-targets=x86,x86_64 --enable-polly --enable-cxx1y --with-gmp=/usr/local --with-isl=/usr/local --with-cloog=/usr/local --with-binutils-include=/usr/includemake -j`nproc`sudo make install
对于CC = clang和CXX = clang,我在链接包含std :: istringstream实例化的简单示例时遇到错误:
#include <sstream>#include <cstdlib>intmain(){ std::istringstream iss("1.1"); double x; iss >> x; return EXIT_SUCCESS;} 错误:
user@ubuntu:~$clang++ -stdlib=libc++ -std=gnu++1z -Ofast -march=native test.cpp -o /tmp/test/tmp/test-785a74.o: In function `std::__1::basic_istringstream<char,std::__1::char_traits<char>,std::__1::allocator<char> >::~basic_istringstream()':test.cpp:(.text._ZNSt3__119basic_istringstreamicns_11char_traitsIcEENS_9allocatorIcEEED0Ev[_ZNSt3__119basic_istringstreamicns_11char_traitsIcEENS_9allocatorIcEEED0Ev]+0x5b): undefined reference to `operator delete(voID*,unsigned long)'/tmp/test-785a74.o: In function `virtual thunk to std::__1::basic_istringstream<char,std::__1::allocator<char> >::~basic_istringstream()':test.cpp:(.text._ZTv0_n24_NSt3__119basic_istringstreamicns_11char_traitsIcEENS_9allocatorIcEEED0Ev[_ZTv0_n24_NSt3__119basic_istringstreamicns_11char_traitsIcEENS_9allocatorIcEEED0Ev]+0x69): undefined reference to `operator delete(voID*,unsigned long)'/tmp/test-785a74.o: In function `std::__1::basic_stringbuf<char,std::__1::allocator<char> >::~basic_stringbuf()':test.cpp:(.text._ZNSt3__115basic_stringbuficns_11char_traitsIcEENS_9allocatorIcEEED0Ev[_ZNSt3__115basic_stringbuficns_11char_traitsIcEENS_9allocatorIcEEED0Ev]+0x26): undefined reference to `operator delete(voID*,unsigned long)'clang: error: linker command Failed with exit code 1 (use -v to see invocation)
但如果CC = gcc且CXX = g,则不会发生错误.在两种情况下,链接器都来自GNU Binutils.
来自#include< iostream>的对象的示例没有这样的问题.
错误的原因是什么?我可以在不重建整个clang / llvm项目树的情况下修复它吗?
解决方法 clang trunk最近发生了变化.编译器不再发出大小为operator delete的弱定义(参见 commit 229241).无论如何发出定义的标志(-fdef-sized-delete)在 commit 229597中稍后重命名.您必须使用-fdefine-sized-deallocation标志编译程序,以便clang发出大小的运算符delete.这应该可以解决您的链接错误.
总结以上是内存溢出为你收集整理的来自libc的istringstream的析构函数中对operator delete的未定义引用全部内容,希望文章能够帮你解决来自libc的istringstream的析构函数中对operator delete的未定义引用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)