随笔 - 137  文章 - 1  trackbacks - 0
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿

随笔分类

随笔档案

收藏夹

调试技巧

搜索

  •  

最新评论

阅读排行榜

评论排行榜

在服务器上安装一些服务的时候,需要访问进口资源,因此设置了一下全局HTTP代理(用完记得关掉。。。)

 

// 例如代理服务器地址为:10.2.1.240
// 端口号为:8123

vi /etc/profile

// 在最后添加六行
https_proxy=10.2.1.240:8123
http_proxy=10.2.1.240:8123
ftp_proxy=10.2.1.240:8123
export https_proxy
export http_proxy
export ftp_proxy

// 使设置立即生效
source /etc/profile

posted @ 2017-11-06 17:54 长戟十三千 阅读(3932) | 评论 (0)编辑 收藏

1.升级cmake
yum autoremove cmake
wget https://cmake.org/files/v3.7/cmake-3.7.1.tar.gz
tar xzf cmake-3.7.1.tar.gz
cd cmake-3.7.1
./bootstrap
gmake -j$(nproc)
make install
cd ..
rm -fr cmake*

2.安装pip

sudo yum -y install epel-release
sudo yum -y install python-pip
sudo yum clean all
pip install distribute

3.安装依赖库

wget http://llvm.org/releases/3.9.1/llvm-3.9.1.src.tar.xz
wget http://llvm.org/releases/3.9.1/cfe-3.9.1.src.tar.xz
wget http://llvm.org/releases/3.9.1/compiler-rt-3.9.1.src.tar.xz
wget http://llvm.org/releases/3.9.1/clang-tools-extra-3.9.1.src.tar.xz
tar xf llvm-3.9.1.src.tar.xz
mv llvm-3.9.1.src llvm
cd llvm/tools
tar xf ../../cfe-3.9.1.src.tar.xz
mv cfe-3.9.1.src clang
cd clang/tools
tar xf ../../../../clang-tools-extra-3.9.1.src.tar.xz
mv clang-tools-extra-3.9.1.src extra
cd ../../../projects
tar xf ../../compiler-rt-3.9.1.src.tar.xz
mv compiler-rt-3.9.1.src compiler-rt
cd ../..
mkdir llvm-build
cd llvm-build
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/home/data/software/clang3.9.1 -DLLVM_OPTIMIZED_TABLEGEN=1 ../llvm
make -j$(nproc)
make install
end

posted @ 2017-10-12 15:19 长戟十三千 阅读(3071) | 评论 (0)编辑 收藏

YouCompleteMe 的强大想必大家都听说过,简单的用一句话来概括的话,媲美 VS 的自动补全 当然可能有一点点过,但可见其强大。但是作为一个十分强大的 vim 插件,他可是十分的难以安装,几乎所有的人,都会在安装阶段苦苦挣扎(别问老夫怎么知道的),然后要么成功安装享受工具带来的便利,要么放弃继续使用传统的自动补全工具(当然也没有那么差,但可能没有 YCM 那么强大)。

经过老夫的辛苦探索,终于在听到 YCM 大名的一年之后成功安装,所以分享出来,希望能够帮助到更多的人。另外如果在安装过程中遇到任何问题都欢迎在评论与我讨论。

有了你我才是我,你的存在令我完整
—— 老夫

系统环境:Kali-Rolling on Oracle VirtualBox,可以当作是最新版(或者说实验版)的 Debian

目标:成功安装使用 YCM, 尽量少的编译软件(即尽量使用预编译 deb 包),尽量可以实现更多种语言的自动补全

安装步骤:

0. 确保 vim 版本是 7.4.143 或以上,并且支持 python 2/3 脚本


vim version

从上图可以看出老夫的 vim 版本是 8.0.49 且支持 python3 脚本但不支持 python2 脚本(截图的倒数第 7,8 行)
如果你的打印结果中没有相关 python 脚本信息,还可以在 vim 中键入命令 :echo has('python') || has('python3'),若结果是 1 则证明是支持的。

若不论是 vim 版本不满足条件或者是不支持 python 脚本,那么就需要从源码编译安装 vim 了,

1. 通过 Vundle 来安装 YCM(官方推荐)

快速安装 vim 的插件管理插件 vundle

在 vim 的配置文件 ~/.vimrc 中添加一行(在call vundle#begin()call vundle#end() 之间)

call vundle#begin() . . .  Plugin 'Valloric/YouCompleteMe’ . . . call vundle#end()

然后保存运行 vim 命令 :PluginInstall 安装 需要特别注意的是这个时候可能等的时间会相当的长

这个时候打开 vim 可能则会有警告如下图


vim warning

1.5 通过 Git 安装 YCM

如果你跟老夫一样,等待 Vundle 安装 YCM 等了好久终于貌似好像成功了,打开 vim 却发现 YouCompleteme unavailable : no module named future (当然没有遇到算你运气好),那么你应该考虑一下换用 Git 来安装 YCM:

# 下载 (在 `~/.vim/bundle` 目录下) $ git clone --recursive [https://github.com/Valloric/YouCompleteMe.git](https://github.com/Valloric/YouCompleteMe.git) # 检查完整性(在 `~/.vim/bundle/YouCompleteMe` 目录下) $ git submodule update --init --recursive

2. 下载安装最新版的 libclang

如果不需要 C 家族的语义化补全,则可跳过这一步

# apt-get install llvm-3.9 clang-3.9 libclang-3.9-dev libboost-all-dev

PS: YCM 官方墙烈推荐使用上游编译的二进制文件代替系统自带的 libclang

You can use the system libclang only if you are sure it is version 3.9 or higher, otherwise don't. Even if it is, we recommend using the official binaries from llvm.org if at all possible. Make sure you download the correct archive file for your OS.

We STRONGLY recommend AGAINST use of the system libclang instead of the upstream compiled binaries. Random things may break. Save yourself the hassle and use the upstream pre-built libclang.

3. 编译构建 ycm_core

需要:cmake python3-dev

YCM 的顶层目录或者说根目录应该是 ~/.vim/bundle/YouCompleteMe

  • 创建一个目录放编译过程中产生的文件
$ mkdir ~/.ycm_build $ cd ~/.ycm_build
  • 生成 makefile

如果跳过第三步的话,则可以直接运行

$ cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

如果没有跳过第三步,说明需要 c 家族的语义化补全则需运行

$ cmake -G "Unix Makefiles" -DUSE_SYSTEM_BOOST=ON DUSE_SYSTEM_LIBCLANG=ON . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

有问题的编译

编译通过的,没有报错,但是这个编译结果是有问题的,看第 3 行,反复强调的 c 家族的语义补全没有了。经过老夫反复的检查,原来是上面的编译命令少了一个 - 符号

$ cmake -G "Unix Makefiles" -DUSE_SYSTEM_BOOST=ON -DUSE_SYSTEM_LIBCLANG=ON . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

这个时候编译的过程如下图:


编译正常

其实这个还是有问题的,看倒数第 3、4 行,使用的是外部的 libclang-3.6 ,第 2 步中说的系统安装的 libclang 最低要是是 3.9。
这个时候就需要删除 ~/.ycm_build 目录下的所有文件,使用下面的命令指定 libclang 的版本重新编译。

$ cmake -G "Unix Makefiles" -DUSE_SYSTEM_BOOST=ON -DEXTERNAL_LIBCLANG_PATH=/usr/lib/x86_64-linux-gnu/libclang-3.9.so . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

编译的结果是之前新建的目录(也就是当前目录下生成了一些 Makefile 文件)


Makefile
  • 构建 ycm_core
#  --config Release 这个构建选项进针对 Windows $ cmake --build . --target ycm_core --config Release

build ycm_core

3.5 配置

  • 复制 .ycm_extra_conf.py 文件
$ cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim/
  • 添加 vim 配置
    注意下面的 python 解释器的路径要和编译 ycm_core 的时候使用的 python 解释器是相同的版本(2 或 3)
“ ~/.vimrc let g:ycm_server_python_interpreter='/usr/bin/python' let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'

4. 其他语言的支持

C#、Go、TypeScript、 JavaScript、 Rust support
由于老夫对这些语言没有太多的涉猎就不做介绍了。

5. 测试安装

首先新建一个 hello.c 文件,


hello.c

可以看到自动补全了头文件,厉害了老夫的 YCM

然后在 vim 中运行 :YcmToggleLogs stderr 命令查看错误日志,


stderr

没有看到报错信息,则证明 YCM 已成功安装。



作者:Helperhaps
链接:http://www.jianshu.com/p/d908ce81017a
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2017-10-12 10:49 长戟十三千 阅读(700) | 评论 (0)编辑 收藏
wget http://luarocks.org/releases/luarocks-2.2.2.tar.gz
tar zxvf luarocks-2.2.2.tar.gz
cd luarocks-2.2.2
./configure --help
/configure --prefix=/usr/local/luarocks --with-lua-bin=/usr/local/bin/
posted @ 2017-10-11 18:08 长戟十三千 阅读(242) | 评论 (0)编辑 收藏
yum install autojump
source /usr/share/autojump/autojump.bash

添加到.bashrc
chmod 777 autojump.bash
echo '/usr/share/autojump/autojump.bash' > ~/.bashrc
posted @ 2017-10-11 10:19 长戟十三千 阅读(217) | 评论 (0)编辑 收藏
添加了cd路径
  
1 cc=../tolua++                                                                                                                                                                                                    
  
2 PKG:= $(wildcard ./pkg/*.pkg)                                                                                                                                                                                    
  3 PKG_NOTDIR:= $(notdir $(PKG))                                                                                                                                                                                    
  4 src:=$(basename  $(PKG_NOTDIR))                                                                                                                                                                                  
  5     
  6 define call_tolua                                                                                                                                                                                                
  7     $(cc) -n tolua$(1) -H ../cpp2lua/tolua$(1).h -o ../cpp2lua/tolua$(1).cpp $(1).pkg;                                                                                                                           
  8 endef                                                                                                                                                                                                            
  9     
 10 SRC_TOLUA:                                                                                                                                                                                                       
 11     cd "./pkg";$(foreach tmp, $(src), $(call call_tolua,$(tmp)))                                                                                                                                                                        
 12     python tolua_open.py                                                                                                                                                                                         
 13     
 14 all: SRC_TOLUA   

cc=./tolua++    
#src
=GameServer GameServerConfig   
PKG := $(wildcard ./pkg/*.pkg)
PKG_NOTDIR := $(notdir $(PKG))
src := $(basename $(PKG_NOTDIR))

define call_tolua   
     $(cc) 
-n tolua$(1-H ./cpp2lua/tolua$(1).h -o ./cpp2lua/tolua$(1).cpp ./pkg/$(1).pkg;   
endef             
                 
SRC_TOLUA:        
    $(
foreach tmp, $(src), $(call call_tolua,$(tmp)))  
                
all: SRC_TOLUA   

posted @ 2017-10-10 17:42 长戟十三千 阅读(884) | 评论 (0)编辑 收藏

linux下动态库

今天无意间发现在linux下share object(dynamic library)中的函数竟然可以不通过回调的方式直接访问主程序中的函数,瞬间颠覆以前对于动态库的观念.

代码所示libhi.so中有一个函数hello, 主程序main中有一个函数hi_out, 那么在main中调用libhi.so中的hello时,hello会自动找到main程序中的hi_output函数地址, 然后进行调用.

在感叹linux下动态库强大的同时, 对于其实现机制也产生了好奇. 经过一番努力终于在程序员的自我修养中第7.6.2章找到答案.
“动态链接器在完成基本自举后, 动态链接器将可执行文件和链接器本身的符号表都合并到一个符号表中, 我们可以称它为全局符号表(Global Symbol Table)…..当一个新的share object被装载进来的时侯, 它的符号表会被合并到全局符号表中”, 因此其实libhi.so在调用hello函数时实际上是从全局符号表中找到hi_out函数的地址并进行调用, 本质上libhi.so并不知道这个hi_out是属于另一个share object还是属于main程序中.

但当我使用dlopen系列函数动态加载libhi.so时, 却总是加载失败提示找不到hi_out函数. 理论上静态加载与动态加载上的行为应该是一样的, 只不过静态加载时dlopen将会被隐式调用而已.

ld的手册找到了答案, ld在生成可执行文件时, 默认只导出被其他动态库使用的符号. 因为是使用dlopen去动态加载libhi.so, 那么链接时ld并不知道可执行文件中的hi_out会被外部引用, 也就不会导出hi_out到动态符号表去. 当dlopen打开libhi.so时, 动态链接器在全局符号表中找不到hi_out符号, 理所当然就报错了.

要解决这个问题只要给链接器加上参数-E将主程序中所有全局符号放到动态符号表中即可, 由于生成可执行文件一般都是gcc直接生成, 因此可以使用gcc -Wl,-E来将-E参数传给ld来完成创建一个可以被动态链接的可执行文件.

posted @ 2017-09-27 11:07 长戟十三千 阅读(2774) | 评论 (0)编辑 收藏
1、本地安全策略,本地策略-安全选项,需要修改成默认的值的修改方式:
1)、在本地安全策略,本地策略-安全选项,网络安全:LAN管理器身份验证级别,如何修改成默认的“没有定义”运行regedit命令,打开祖册表编 辑器。
2)、查找注册表浏览到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA
直接删除 LMCompatibilityLevel 键。确定删除后。
3)、运行secpol.msc命令。打开本地安全策略。
在本地安全策略,本地策略-安全选项,网络安全:LAN管理器身份验证级别,如何修改成默认的“没有定义”
查看 网络安全:LAN管理器身份验证级别,安全设置已经变为默认“没有定义”。在本地安全策略,本地策略-安全选项,网络安全:LAN管理器身份验证级别,如何修改成默认的“没有定义”
posted @ 2017-09-18 14:46 长戟十三千 阅读(3033) | 评论 (0)编辑 收藏
1、配置DNS

 vi  /etc/sysconfig/network-scripts/ifcfg-eth0

              ONBOOT=yes

               MM_CONTROLLED=no
2、/etc/resolv.conf 配置DNS 客户

/etc/resolv.conf 配置DNS 客户
文件/etc/resolv.conf 配置DNS 客户,它包含了主机的域名搜索顺序和DNS服务器的地址,每一行应包含一个关键字和一个或多个的由空格隔开的参数。
下面是一个例子文件: 

nameserver 8.8.8.8
nameserver 8.8.4.4
search localdomain

posted @ 2017-09-18 11:56 长戟十三千 阅读(353) | 评论 (0)编辑 收藏

先说坑(解决方案在后面安装步奏中会说)

  • vim版本低 
    明明就差小数点后几位但是就不行,索性就装了vim8.0

  • gcc版本不支持c++11 
    现在发现下一个centos工具包就行了,其中包含最新的gcc

  • vim不支持python 
    在编译vim源代码时加上一些后缀就行了

  • ./install.py时说缺少依赖 
    这个就按照出错提示中要求输的命令输一下就行了


步奏

更新yum

sudo yum upgrade sduo yum update
  • 1
  • 2

下载git

sudo yum install git
  • 1

升级vim以及gcc

升级gcc

sudo yum install centos-release-scl -y sudo yum install devtoolset-3-toolchain -y sudo scl enable devtoolset-3 bash
  • 1
  • 2
  • 3

升级vim

yum install ncurses-devel wget https://github.com/vim/vim/archive/master.zip unzip master.zip cd vim-master cd src/ ./configure --with-features=huge -enable-pythoninterp --enable-python3interp sudo make sudo make install export PATH=/usr/local/bin:$PATH
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这里列举一些 ./configure 后面的配置选项

  • –with-features=huge:支持最大特性
  • –enable-rubyinterp:打开对ruby编写的插件的支持
  • –enable-pythoninterp:打开对python编写的插件的支持
  • –enable-python3interp:打开对python3编写的插件的支持
  • –enable-luainterp:打开对lua编写的插件的支持
  • –enable-perlinterp:打开对perl编写的插件的支持
  • –enable-multibyte:打开多字节支持,可以在Vim中输入中文
  • –enable-cscope:打开对cscope的支持
  • –with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu/ 指定python 路径
  • –with-python-config-dir=/usr/lib/python3.5/config-3.5m-x86_64-linux-gnu/ 指定python3路径
  • –prefix=/usr/local/vim:指定将要安装到的路径(自行创建)

关于vim的安装路径

默认新的vim是安在/usr/bin/local/中的,但是PATH中会首先找到/usr/bin/中旧的vim,所以不介意的话把旧的vim删了也可以,也可以输入下面的命令来使命令行中的vim指令指向 /usr/local/bin/vim 的程序

alias vim='/usr/local/bin/vim'
  • 1

下载编译ycm

git clone https://github.com/Valloric/YouCompleteMe.git ~/.vim/bundle/YouCompleteMe git submodule update --init --recursive
  • 1
  • 2

在 ~/ 下创建文件 .vimrc,输入一下内容

set nocompatible  filetype off  set rtp+=~/.vim/bundle/Vundle.vim  call vundle#begin()  Plugin 'gmarik/Vundle.vim'  call vundle#end()  filetype plugin indent on 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用vim打开,后输入 :PluginInstall 
完成后在 ‘Plugin ‘gmarik/Vundle.vim’的下一行输入 ‘Plugin ‘Valloric/YouCompleteMe’,保持后退出

cd ~/.vim/bundle/YouCompleteMe ./install.py --clang-completer
  • 1
  • 2

安装完成后将.yum_extra_conf.py复制一份到 ~/

cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py ~/
  • 1

之后打开在~/中的文件,进行找到此为止进行添加

...  '-isystem', '/usr/include', '-isystem', '/usr/include/c++/', '-isystem', '/usr/include/i386-linux-gnu/c++'  ... 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

完毕后打开.vimrc进行配置

let g:ycm_global_ycm_extra_conf='~/.ycm_extra_conf.py'  "设置全局配置文件的路径 let g:ycm_seed_identifiers_with_syntax=1    " 语法关键字补全 let g:ycm_confirm_extra_conf=0  " 打开vim时不再询问是否加载ycm_extra_conf.py配置 let g:ycm_key_invoke_completion = '<C-a>' " ctrl + a 触发补全 set completeopt=longest,menu    "让Vim的补全菜单行为与一般IDE一致(参考VimTip1228) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

更过个性化配置可以自行百度或google

posted @ 2017-09-13 13:27 长戟十三千 阅读(1076) | 评论 (0)编辑 收藏
仅列出标题
共14页: First 6 7 8 9 10 11 12 13 14