TA的每日心情 | 开心 2020-6-18 22:00 |
---|
签到天数: 1 天 [LV.1]初来乍到
管理员
  
- 积分
- 1645
|
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文件,删除即可。
|
|