来自libc ++的istringstream析构函数中对运算符delete的未定义引用

托米洛夫·阿纳托利(Tomilov Anatoliy)

我尝试clang++通过两种方式从中继(〜3.7)构建:通过gcc(4.8)和(旧)clang++(数据包管理器的3.4和3.5)。两者都包含相同的步骤:

export CC=clang
export CXX=clang++
export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:$HOME/llvm/projects/libcxxabi/include"

sudo apt-get install git

cd
git clone --single-branch --branch master --depth=1 http://llvm.org/git/llvm
cd llvm/projects/
git clone --single-branch --branch master --depth=1 http://llvm.org/git/libcxxabi
git clone --single-branch --branch master --depth=1 http://llvm.org/git/libcxx
git clone --single-branch --branch master --depth=1 http://llvm.org/git/compiler-rt
cd ../tools
git clone --single-branch --branch master --depth=1 http://llvm.org/git/clang
git clone --single-branch --branch master --depth=1 http://llvm.org/git/clang-tools-extra extra
git clone --single-branch --branch master --depth=1 http://llvm.org/git/lld
git clone --single-branch --branch master --depth=1 http://llvm.org/git/lldb
git clone --single-branch --branch master --depth=1 http://llvm.org/git/polly

sudo apt-get install python-dev libedit-dev libncurses-dev swig libgmp-dev libgmp3-dev dh-autoreconf libunwind8 libunwind8-dev cmake

cd
cd llvm/tools/polly/utils
mkdir -p ~/build-cloog
bash checkout_cloog.sh ~/build-cloog
mkdir -p ~/build-isl
bash checkout_isl.sh ~/build-isl
cd ~/build-isl/
./configure
make
sudo make install
cd ~/build-cloog/
./configure --with-isl=system
make
sudo make install

cd
mkdir build-llvm
cd build-llvm
bash ../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/include
make -j`nproc`
sudo make install

对于CC=clang并且CXX=clang++在链接包含std::istringstream实例的简单示例时遇到错误

#include <sstream>

#include <cstdlib>

int
main()
{
        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::char_traits<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::char_traits<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++两种情况下ld来自链接器GNU Binutils

来自对象的示例样本#include <iostream>没有这样的问题。

错误原因是什么?我可以在不重建整个clang/llvm项目树的情况下进行修复吗?

弗洛里安·索瓦德(Florian Sowade)

c主干最近有了变化。编译器不再发出大小运算符delete的弱定义(请参阅提交229241)。无论如何(-fdef-sized-delete发出定义的标志稍后在提交229597中被重命名

您必须使用该-fdefine-sized-deallocation标志编译程序,以便clang发出大小运算符delete。这应该可以解决您的链接错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用自定义析构函数时出现“未定义引用”错误

来自分类Dev

来自vector <string>的c_str()结果在libc ++中变成垃圾

来自分类Dev

何时使用:类析构函数或删除运算符

来自分类Dev

来自Json的Google图表“未定义不是函数”

来自分类Dev

对构造函数和析构函数的未定义引用

来自分类Dev

基于策略的类中的策略转换运算符与私有析构函数

来自分类Dev

在赋值运算符之前调用的结构的析构函数

来自分类Dev

来自dict析构函数的Segfault

来自分类Dev

jsoncpp运算符中的未定义引用=

来自分类Dev

在Linux上使用`libc ++`进行编译时,对`__cxa_thread_atexit @@ CXXABI`的未定义引用

来自分类Dev

C ++-对基类运算符的未定义引用

来自分类Dev

C ++ Protobuf对构造函数/析构函数的未定义引用

来自分类Dev

未定义对clang中析构函数的引用

来自分类Dev

为什么在通过逻辑运算符调用的函数中未定义“ this”?

来自分类Dev

未定义对vTable的构造函数和析构函数引用

来自分类Dev

在派生类中定义析构函数需要复制赋值运算符

来自分类Dev

动态SQL中的IN运算符,其中值来自参数

来自分类Dev

类析构函数导致重载+运算符的问题

来自分类Dev

未定义从dll引用非成员运算符

来自分类Dev

未定义引用“来自外部库的函数名称”

来自分类Dev

C ++对共享库中类的构造函数和析构函数的未定义引用错误

来自分类Dev

在继承的类中对运算符<<的未定义引用

来自分类Dev

取消运算符delete []中的析构函数调用

来自分类Dev

未定义对朋友运算符的引用

来自分类Dev

对构造函数和析构函数的未定义引用

来自分类Dev

重载delete []运算符,以允许使用析构函数缩小类型的数组

来自分类Dev

来自静态库中共享库的未定义引用

来自分类Dev

如何在移动分配运算符中调用析构函数?

来自分类Dev

提取运算符重载中的c ++未定义引用

Related 相关文章

  1. 1

    使用自定义析构函数时出现“未定义引用”错误

  2. 2

    来自vector <string>的c_str()结果在libc ++中变成垃圾

  3. 3

    何时使用:类析构函数或删除运算符

  4. 4

    来自Json的Google图表“未定义不是函数”

  5. 5

    对构造函数和析构函数的未定义引用

  6. 6

    基于策略的类中的策略转换运算符与私有析构函数

  7. 7

    在赋值运算符之前调用的结构的析构函数

  8. 8

    来自dict析构函数的Segfault

  9. 9

    jsoncpp运算符中的未定义引用=

  10. 10

    在Linux上使用`libc ++`进行编译时,对`__cxa_thread_atexit @@ CXXABI`的未定义引用

  11. 11

    C ++-对基类运算符的未定义引用

  12. 12

    C ++ Protobuf对构造函数/析构函数的未定义引用

  13. 13

    未定义对clang中析构函数的引用

  14. 14

    为什么在通过逻辑运算符调用的函数中未定义“ this”?

  15. 15

    未定义对vTable的构造函数和析构函数引用

  16. 16

    在派生类中定义析构函数需要复制赋值运算符

  17. 17

    动态SQL中的IN运算符,其中值来自参数

  18. 18

    类析构函数导致重载+运算符的问题

  19. 19

    未定义从dll引用非成员运算符

  20. 20

    未定义引用“来自外部库的函数名称”

  21. 21

    C ++对共享库中类的构造函数和析构函数的未定义引用错误

  22. 22

    在继承的类中对运算符<<的未定义引用

  23. 23

    取消运算符delete []中的析构函数调用

  24. 24

    未定义对朋友运算符的引用

  25. 25

    对构造函数和析构函数的未定义引用

  26. 26

    重载delete []运算符,以允许使用析构函数缩小类型的数组

  27. 27

    来自静态库中共享库的未定义引用

  28. 28

    如何在移动分配运算符中调用析构函数?

  29. 29

    提取运算符重载中的c ++未定义引用

热门标签

归档