嵌入式之家

 找回密码
 现在注册

QQ登录

只需一步,快速开始

搜索
热搜: ARM cortex
查看: 7170|回复: 0

安装clang标准库:libc++和libc++abi

[复制链接]
  • TA的每日心情
    开心
    2020-6-18 22:00
  • 签到天数: 1 天

    [LV.1]初来乍到

    101

    主题

    192

    帖子

    1645

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    1645
    发表于 2016-7-26 17:48:40 | 显示全部楼层 |阅读模式
    clang 的标准库————libc++(接口层)和 libc++abi(实现层)需要安装头文件和动态链接库(*.so)。

    1、下载源码包:
    [pre]
    http://llvm.org/releases/3.8.1/libcxx-3.8.1.src.tar.xz
    http://llvm.org/releases/3.8.1/libcxxabi-3.8.1.src.tar.xz
    [/pre]

    2、将两个安装包解压:

    3、进入libcxx-3.8.1.src/lib目录,执行目录下的buildit
    [mw_shl_code=shell,true]cd libcxx-3.8.1.src/lib/
    ./buildit[/mw_shl_code]
    4、执行完成后在目录下生成了libc++.so.1.0库,我们把这个库复制到/usr/lib/目录下,并创建链接:
    [mw_shl_code=shell,true]cp libc++.so.1.0 /usr/lib/
    cd /usr/lib/
    ln -s libc++.so.1.0  libc++.so.1
    ln -s libc++.so.1.0  libc++.so[/mw_shl_code]
    5、同样的方法安装 libc++abi ,进入libcxxabi-3.8.1.src/lib目录,执行目录下的buildit
    cd libcxxabi-3.8.1.src/lib/
    ./buildit
    6、执行完成后在目录下生成了libc++abi.so.1.0库,我们把这个库复制到/usr/lib/目录下,并创建链接:
    [mw_shl_code=shell,true]cp libc++abi.so.1.0 /usr/lib/
    cd /usr/lib/
    ln -s libc++abi.so.1.0 libc++abi.so.1
    ln -s libc++abi.so.1.0 libc++abi.so[/mw_shl_code]
    注意:编译 libc++abi需要用到 libc++的头文件,所以需要手动修改buildit文件里的编译选项,下面是修改后的编译选项:
    [mw_shl_code=shell,false]EXTRA_FLAGS="-I../../libcxx-3.8.1.src/include -std=c++11 -stdlib=libc++ -fstrict-aliasing -Wstrict-aliasing=2 \
                 -Wsign-conversion -Wshadow -Wconversion -Wunused-variable \
                 -Wmissing-field-initializers -Wchar-subscripts -Wmismatched-tags \
                 -Wmissing-braces -Wshorten-64-to-32 -Wsign-compare \
                 -Wstrict-aliasing=2 -Wstrict-overflow=4 -Wunused-parameter \
                 -Wnewline-eof"[/mw_shl_code]
    这里的头文件路径按实际来写。

    另外libcxxabi-3.8.1的源码有一点小问题,编译时会报错:
    [mw_shl_code=shell,false]/data/llvm/llvm-3.8.1.src/libcxxabi/lib/../src/cxa_noexception.cpp:42: multiple definition of `__cxa_current_primary_exception'
    cxa_exception.o:/data/llvm/llvm-3.8.1.src/libcxxabi/lib/../src/cxa_exception.cpp:632: first defined here
    cxa_noexception.o: In function `__cxa_decrement_exception_refcount':
    /data/llvm/llvm-3.8.1.src/libcxxabi/lib/../src/cxa_noexception.cpp:37: multiple definition of `__cxa_decrement_exception_refcount'
    cxa_exception.o:/data/llvm/llvm-3.8.1.src/libcxxabi/lib/../src/cxa_exception.cpp:607: first defined here
    cxa_noexception.o: In function `__cxa_increment_exception_refcount':
    /data/llvm/llvm-3.8.1.src/libcxxabi/lib/../src/cxa_noexception.cpp:31: multiple definition of `__cxa_increment_exception_refcount'
    cxa_exception.o:/data/llvm/llvm-3.8.1.src/libcxxabi/lib/../src/cxa_exception.cpp:591: first defined here
    cxa_noexception.o: In function `__cxa_rethrow_primary_exception':
    /data/llvm/llvm-3.8.1.src/libcxxabi/lib/../src/cxa_noexception.cpp:46: multiple definition of `__cxa_rethrow_primary_exception'
    cxa_exception.o:/data/llvm/llvm-3.8.1.src/libcxxabi/lib/../src/cxa_exception.cpp:674: first defined here
    cxa_noexception.o: In function `__cxa_uncaught_exception':
    /data/llvm/llvm-3.8.1.src/libcxxabi/lib/../src/cxa_noexception.cpp:51: multiple definition of `__cxa_uncaught_exception'
    cxa_exception.o:/data/llvm/llvm-3.8.1.src/libcxxabi/lib/../src/cxa_exception.cpp:708: first defined here
    cxa_noexception.o: In function `__cxa_uncaught_exceptions':
    /data/llvm/llvm-3.8.1.src/libcxxabi/lib/../src/cxa_noexception.cpp:54: multiple definition of `__cxa_uncaught_exceptions'
    cxa_exception.o:/data/llvm/llvm-3.8.1.src/libcxxabi/lib/../src/cxa_exception.cpp:708: first defined here
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    [root@helloworld lib]# rm -rf cxa_noexception.o [/mw_shl_code]
    上面的错误是在链接的时候出现的,很多重定义错误。解决方法是删除/src/cxa_noexception.cpp文件。如果还是报错,检查是否存在lib/cxa_noexception.o文件,删除即可。



    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 现在注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|嵌入式之家 ( 京ICP备14038168号-1 )

    GMT+8, 2024-5-21 03:13 , Processed in 0.026132 second(s), 26 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表