<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>叶小蜗</title>
  
  <subtitle>一步一步往上爬，乘着叶片向前飞</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="https://ycliu96.github.io/"/>
  <updated>2019-12-05T11:26:56.369Z</updated>
  <id>https://ycliu96.github.io/</id>
  
  <author>
    <name>叶小蜗</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>利用Linux软件管理命令实现g++、gcc不同版本的切换</title>
    <link href="https://ycliu96.github.io/2019/12/05/alternatives/"/>
    <id>https://ycliu96.github.io/2019/12/05/alternatives/</id>
    <published>2019-12-05T10:52:02.000Z</published>
    <updated>2019-12-05T11:26:56.369Z</updated>
    
    <content type="html"><![CDATA[<p>在linux系统中，<code>update-alternatives</code>命令常被用于处理软件不同版本的切换。各linux发行版中均提供了该命令，只是命令参数可能略有区别。本文以Ubuntu为例，利用该命令实现g++、gcc不同版本的切换。</p><a id="more"></a><h2 id="update-alternatives的完整用法"><a href="#update-alternatives的完整用法" class="headerlink" title="update-alternatives的完整用法"></a><code>update-alternatives</code>的完整用法</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line">用法：update-alternatives [&lt;选项&gt; ...] &lt;命令&gt;</span><br><span class="line"></span><br><span class="line">命令：</span><br><span class="line">  --install &lt;链接&gt; &lt;名称&gt; &lt;路径&gt; &lt;优先级&gt;</span><br><span class="line">    [--slave &lt;链接&gt; &lt;名称&gt; &lt;路径&gt;] ...</span><br><span class="line">                           在系统中加入一组候选项。</span><br><span class="line">  --remove &lt;名称&gt; &lt;路径&gt;   从 &lt;名称&gt; 替换组中去除 &lt;路径&gt; 项。</span><br><span class="line">  --remove-all &lt;名称&gt;      从替换系统中删除 &lt;名称&gt; 替换组。</span><br><span class="line">  --auto &lt;名称&gt;            将 &lt;名称&gt; 的主链接切换到自动模式。</span><br><span class="line">  --display &lt;名称&gt;         显示关于 &lt;名称&gt; 替换组的信息。</span><br><span class="line">  --query &lt;名称&gt;           机器可读版的 --display &lt;名称&gt;.</span><br><span class="line">  --list &lt;名称&gt;            列出 &lt;名称&gt; 替换组中所有的可用候选项。</span><br><span class="line">  --get-selections         列出主要候选项名称以及它们的状态。</span><br><span class="line">  --set-selections         从标准输入中读入候选项的状态。</span><br><span class="line">  --config &lt;名称&gt;          列出 &lt;名称&gt; 替换组中的可选项，并就使用其中</span><br><span class="line">                           哪一个，征询用户的意见。</span><br><span class="line">  --set &lt;名称&gt; &lt;路径&gt;      将 &lt;路径&gt; 设置为 &lt;名称&gt; 的候选项。</span><br><span class="line">  --all                    对所有可选项一一调用 --config 命令。</span><br><span class="line"></span><br><span class="line">&lt;链接&gt;  是指向 /etc/alternatives/&lt;名称&gt; 的符号链接。 (如 /usr/bin/pager)</span><br><span class="line">&lt;名称&gt;  是该链接替换组的主控名。(如 pager)</span><br><span class="line">&lt;路径&gt;  是候选项目标文件的位置。（程序的实际路径）(如 /usr/bin/less)</span><br><span class="line">&lt;优先级&gt;  是一个整数，在自动模式下，这个数字越高的选项，其优先级也就越高。</span><br><span class="line"></span><br><span class="line">选项：</span><br><span class="line">  --altdir &lt;目录&gt;          改变候选项目录。</span><br><span class="line">  --admindir &lt;目录&gt;        设置 statoverride 文件的目录。</span><br><span class="line">  --log &lt;文件&gt;             改变日志文件。</span><br><span class="line">  --force                  就算没有通过自检，也强制执行操作。</span><br><span class="line">  --skip-auto              在自动模式中跳过设置正确候选项的提示</span><br><span class="line">                           (只与 --config 有关)</span><br><span class="line">  --verbose                启用详细输出。</span><br><span class="line">  --quiet                  安静模式，输出尽可能少的信息。不显示输出信息。</span><br><span class="line">  --help                   显示本帮助信息。</span><br><span class="line">  --version                显示版本信息。</span><br></pre></td></tr></table></figure><h2 id="示例"><a href="#示例" class="headerlink" title="示例"></a>示例</h2><h3 id="安装gcc、g"><a href="#安装gcc、g" class="headerlink" title="安装gcc、g++"></a>安装gcc、g++</h3><ul><li>查看当前版本<code>ll /usr/bin/gcc*</code></li><li>安装gcc-4.8和gcc-5<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo apt install gcc-4.8 gcc-4.8-multilib g++-4.8 g++-4.8-multilib</span><br><span class="line">sudo apt install gcc-5 gcc-5--multilib g++-5 g++-5--multilib</span><br></pre></td></tr></table></figure></li></ul><h3 id="注册软件"><a href="#注册软件" class="headerlink" title="注册软件"></a>注册软件</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8</span><br><span class="line">sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 --slave /usr/bin/g++ g++ /usr/bin/g++-5</span><br><span class="line">sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7</span><br></pre></td></tr></table></figure><h3 id="选择gcc版本"><a href="#选择gcc版本" class="headerlink" title="选择gcc版本"></a>选择gcc版本</h3><p>命令<code>sudo update-alternatives --config gcc</code>，输入数字可以直接切换版本：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">$ sudo update-alternatives --config gcc</span><br><span class="line">There are 3 choices for the alternative gcc (providing /usr/bin/gcc).</span><br><span class="line"></span><br><span class="line">  Selection    Path              Priority   Status</span><br><span class="line">------------------------------------------------------------</span><br><span class="line">* 0            /usr/bin/gcc-7     70        auto mode</span><br><span class="line">  1            /usr/bin/gcc-4.8   40        manual mode</span><br><span class="line">  2            /usr/bin/gcc-5     50        manual mode</span><br><span class="line">  3            /usr/bin/gcc-7     70        manual mode</span><br><span class="line"></span><br><span class="line">Press &lt;enter&gt; to keep the current choice[*], or type selection number: 1</span><br><span class="line">update-alternatives: using /usr/bin/gcc-4.8 to provide /usr/bin/gcc (gcc) in manual mode</span><br></pre></td></tr></table></figure><h3 id="删除gcc4-5"><a href="#删除gcc4-5" class="headerlink" title="删除gcc4.5"></a>删除gcc4.5</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo update-alternatives --remove gcc /usr/bin/gcc-4.5</span><br><span class="line">sudo apt-get remove gcc-4.5</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;在linux系统中，&lt;code&gt;update-alternatives&lt;/code&gt;命令常被用于处理软件不同版本的切换。各linux发行版中均提供了该命令，只是命令参数可能略有区别。本文以Ubuntu为例，利用该命令实现g++、gcc不同版本的切换。&lt;/p&gt;
    
    </summary>
    
    
      <category term="ubuntu" scheme="https://ycliu96.github.io/tags/ubuntu/"/>
    
      <category term="linux" scheme="https://ycliu96.github.io/tags/linux/"/>
    
  </entry>
  
  <entry>
    <title>git的基本使用</title>
    <link href="https://ycliu96.github.io/2019/12/05/git/"/>
    <id>https://ycliu96.github.io/2019/12/05/git/</id>
    <published>2019-12-05T08:30:50.000Z</published>
    <updated>2019-12-05T11:39:44.532Z</updated>
    
    <content type="html"><![CDATA[<p>记录一些git的基本操作，以备不时之需。想要更详细、系统地学习可以参考<a href="https://www.liaoxuefeng.com/wiki/896043488029600" target="_blank" rel="noopener">廖雪峰的网站</a></p><a id="more"></a><h2 id="基本命令"><a href="#基本命令" class="headerlink" title="基本命令"></a>基本命令</h2><ul><li><p>初始化一个Git仓库，使用git init命令。<br>添加文件到Git仓库，分两步：</p><ol><li>使用命令git add <file>，注意，可反复多次使用，添加多个文件；</file></li><li>使用命令git commit -m <message>，完成。</message></li></ol></li><li><p>要关联一个远程库，使用命令<code>git remote add origin git@server-name:path/repo-name.git</code>；<br>关联后，使用命令<code>git push -u origin master</code>第一次推送master分支的所有内容；<br>此后，每次本地提交后，只要有必要，就可以使用命令<code>git push origin master</code>推送最新修改；</p></li><li><p>HEAD指向的版本就是当前版本，因此，Git允许我们在版本的历史之间穿梭，使用命令<code>git reset --hard commit_id</code>。</p></li><li><p>穿梭前，用<code>git log</code>可以查看提交历史，以便确定要回退到哪个版本。</p></li><li><p>要重返未来，用<code>git reflog</code>查看命令历史，以便确定要回到未来的哪个版本。</p></li></ul><h2 id="分支操作"><a href="#分支操作" class="headerlink" title="分支操作"></a>分支操作</h2><p>Git鼓励大量使用分支：</p><ul><li>查看分支：<code>git branch</code></li><li>创建分支：<code>git branch &lt;name&gt;</code></li><li>切换分支：<code>git checkout &lt;name&gt;</code></li><li>创建+切换分支：<code>git checkout -b &lt;name&gt;</code></li><li>合并某分支到当前分支：<code>git merge &lt;name&gt;</code></li><li>删除分支：<code>git branch -d &lt;name&gt;</code></li><li>合并分支时，加上<code>--no-ff</code>参数就可以用普通模式合并，合并后的历史有分支，能看出来曾经做过合并，而<code>fast forward</code>合并就看不出来曾经做过合并</li></ul><ul><li><p>修复bug时，我们会通过创建新的bug分支进行修复，然后合并，最后删除；当手头工作没有完成时，先把工作现场<code>git stash</code>一下，然后去修复bug，修复后，再<code>git stash pop</code>，回到工作现场。</p></li><li><p>开发一个新feature，最好新建一个分支；<br>如果要丢弃一个没有被合并过的分支，可以通过<code>git branch -D &lt;name&gt;</code>强行删除。</p><h2 id="远程库操作"><a href="#远程库操作" class="headerlink" title="远程库操作"></a>远程库操作</h2></li><li><p>查看远程库信息，使用<code>git remote -v</code>；</p></li><li><p>从本地推送分支，使用<code>git push origin branch-name</code>，如果推送失败，先用<code>git pull</code>抓取远程的新提交(本地新建的分支如果不推送到远程，对其他人就是不可见的)；</p></li><li><p>在本地创建和远程分支对应的分支，使用<code>git checkout -b branch-name origin/branch-name</code>，本地和远程分支的名称最好一致；</p></li><li><p>建立本地分支和远程分支的关联，使用<code>git branch --set-upstream branch-name origin/branch-name</code>；</p></li><li><p>从远程抓取分支，使用<code>git pull</code>，如果有冲突，要先处理冲突。</p><h2 id="标签操作"><a href="#标签操作" class="headerlink" title="标签操作"></a>标签操作</h2></li><li><p>命令<code>git tag &lt;tagname&gt;</code>用于新建一个标签，默认为HEAD，也可以指定一个commit id；</p></li><li><p>命令<code>git tag -a &lt;tagname&gt; -m &quot;blablabla...&quot;</code>可以指定标签信息；</p></li><li><p>命令<code>git tag</code>可以查看所有标签。</p></li><li><p>命令<code>git push origin &lt;tagname&gt;</code>可以推送一个本地标签；</p></li><li><p>命令<code>git push origin --tags</code>可以推送全部未推送过的本地标签；</p></li><li><p>命令<code>git tag -d &lt;tagname&gt;</code>可以删除一个本地标签；</p></li><li><p>命令<code>git push origin :refs/tags/&lt;tagname&gt;</code>可以删除一个远程标签。</p><h2 id="gitignore"><a href="#gitignore" class="headerlink" title=".gitignore"></a>.gitignore</h2><p>忽略某些文件时，需要编写.gitignore；</p></li><li><p>.gitignore文件本身要放到版本库里，并且可以对.gitignore做版本管理！<br>如果你确实想添加该文件，可以用<code>-f</code>强制添加到Git：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git add -f App.class</span><br></pre></td></tr></table></figure></li><li><p>或者你发现，可能是.gitignore写得有问题，需要找出来到底哪个规则写错了，可以用<code>git check-ignore</code>命令检查。</p></li></ul><h2 id="设置命令简写"><a href="#设置命令简写" class="headerlink" title="设置命令简写"></a>设置命令简写</h2><p>有没有经常敲错命令？比如git status？status这个单词真心不好记。<br>如果敲git st就表示git status那就简单多了，当然这种偷懒的办法我们是极力赞成的。</p><p>我们只需要敲一行命令，告诉Git，以后st就表示status：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git config --global alias.st status</span><br></pre></td></tr></table></figure><p>当然还有别的命令可以简写，很多人都用co表示checkout，ci表示commit，br表示branch：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">git config --global alias.co checkout</span><br><span class="line">git config --global alias.ci commit</span><br><span class="line">git config --global alias.br branch</span><br></pre></td></tr></table></figure><p>以后提交就可以简写成：<br><code>git ci -m &quot;bala bala bala...</code></p><p><code>--global</code>参数是全局参数，也就是这些命令在这台电脑的所有Git仓库下都有用。</p><p>在撤销修改一节中，我们知道，命令<code>git reset HEAD file</code>可以把暂存区的修改撤销掉（unstage），重新放回工作区。既然是一个unstage操作，就可以配置一个unstage别名：<code>git config --global alias.unstage &#39;reset HEAD&#39;</code></p><p>当你敲入命令：<code>git unstage test.py</code><br>实际上Git执行的是：<code>git reset HEAD test.py</code></p><p>配置一个<code>git last</code>，让其显示最后一次提交信息：<br><code>git config --global alias.last &#39;log -1&#39;</code><br>这样，用<code>git last</code>就能显示最近一次的提交：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">git last</span><br><span class="line">commit adca45d317e6d8a4b23f9811c3d7b7f0f180bfe2</span><br><span class="line">Merge: bd6ae48 291bea8</span><br><span class="line">Author: Michael Liao &lt;askxuefeng@gmail.com&gt;</span><br><span class="line">Date:   Thu Aug 22 22:49:22 2013 +0800</span><br><span class="line"></span><br><span class="line">    merge &amp; fix hello.py</span><br></pre></td></tr></table></figure><p>甚至还有人丧心病狂地把<code>lg</code>配置成了：<br><code>git config --global alias.lg &quot;log --color --graph --pretty=format:&#39;%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)&lt;%an&gt;%Creset&#39; --abbrev-commit&quot;</code></p><h2 id="配置文件"><a href="#配置文件" class="headerlink" title="配置文件"></a>配置文件</h2><p>配置Git的时候，加上<code>--global</code>是针对当前用户起作用的，如果不加，那只针对当前的仓库起作用。<br>配置文件放哪了？每个仓库的Git配置文件都放在.git/config文件中：</p><figure class="highlight elixir"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">cat .git/config </span><br><span class="line">[core]</span><br><span class="line">    repositoryformatversion = <span class="number">0</span></span><br><span class="line">    filemode = <span class="keyword">true</span></span><br><span class="line">    bare = <span class="keyword">false</span></span><br><span class="line">    logallrefupdates = <span class="keyword">true</span></span><br><span class="line">    ignorecase = <span class="keyword">true</span></span><br><span class="line">    precomposeunicode = <span class="keyword">true</span></span><br><span class="line">[remote <span class="string">"origin"</span>]</span><br><span class="line">    url = git<span class="variable">@github</span>.<span class="symbol">com:</span>michaelliao/learngit.git</span><br><span class="line">    fetch = +refs/heads/*<span class="symbol">:refs/remotes/origin/*</span></span><br><span class="line">[branch <span class="string">"master"</span>]</span><br><span class="line">    remote = origin</span><br><span class="line">    merge = refs/heads/master</span><br><span class="line">[<span class="keyword">alias</span>]</span><br><span class="line">    last = log -<span class="number">1</span></span><br><span class="line">别名就在[<span class="keyword">alias</span>]后面，要删除别名，直接把对应的行删掉即可。</span><br><span class="line">而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中：</span><br><span class="line">cat .gitconfig</span><br><span class="line">[<span class="keyword">alias</span>]</span><br><span class="line">    co = checkout</span><br><span class="line">    ci = commit</span><br><span class="line">    br = branch</span><br><span class="line">    st = status</span><br><span class="line">[user]</span><br><span class="line">    name = Your Name</span><br><span class="line">    email = your<span class="variable">@email</span>.com</span><br></pre></td></tr></table></figure><p>配置别名也可以直接修改这个文件，如果改错了，可以删掉文件重新通过命令配置。</p><blockquote><p>注意:含有.git/的内部文件夹会被屏蔽，无法被当前工作区的git追踪，例如：</p></blockquote><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">workspace/</span><br><span class="line">    .git/</span><br><span class="line">        ...</span><br><span class="line">    mode/</span><br><span class="line">        ...</span><br><span class="line">    exp/</span><br><span class="line">        .git/</span><br><span class="line">            ...</span><br><span class="line">        ...</span><br><span class="line">    a.py</span><br><span class="line">    b.py</span><br><span class="line">    ...</span><br></pre></td></tr></table></figure><p>以上目录中，文件夹<code>exp/</code>不会被当前git追踪   </p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;记录一些git的基本操作，以备不时之需。想要更详细、系统地学习可以参考&lt;a href=&quot;https://www.liaoxuefeng.com/wiki/896043488029600&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;廖雪峰的网站&lt;/a&gt;&lt;/p&gt;
    
    </summary>
    
    
      <category term="git" scheme="https://ycliu96.github.io/tags/git/"/>
    
  </entry>
  
  <entry>
    <title>BUG+SOLUTION集锦</title>
    <link href="https://ycliu96.github.io/2019/09/03/bug/"/>
    <id>https://ycliu96.github.io/2019/09/03/bug/</id>
    <published>2019-09-03T08:49:00.000Z</published>
    <updated>2019-12-05T11:39:45.617Z</updated>
    
    <content type="html"><![CDATA[<p>记录了在日常使用ubuntu和学习过程中遇到的故障和解决方法。</p><a id="more"></a><h2 id="ERROR-GLEW-initalization-error-Missing-GL-version"><a href="#ERROR-GLEW-initalization-error-Missing-GL-version" class="headerlink" title="ERROR: GLEW initalization error: Missing GL version"></a>ERROR: GLEW initalization error: Missing GL version</h2><ul><li><p>BUG：<br>在使用openai/baselines加载训练好的使用了mujoco环境的模型是出现mujoco-py无响应，出现<code>ERROR: GLEW initalization error: Missing GL version</code></p></li><li><p>SOLUTION：<br>github上给出的解决方案是</p><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="builtin-name">export</span> <span class="attribute">LD_PRELOAD</span>=/usr/lib/x86_64-linux-gnu/libGLEW.so</span><br></pre></td></tr></table></figure></li></ul><p>执行后出现错误信息<code>ERROR: ld.so: object &#39;/usr/lib/x86_64-linux-gnu/libGLEW.so&#39; from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.</code><br>和明显缺少动态库<code>libGLEW</code>，安装即可</p><figure class="highlight q"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-<span class="built_in">get</span> install libglew-<span class="built_in">dev</span></span><br></pre></td></tr></table></figure><h2 id="Error-Bad-return-status-for-module-build-on-kernel-5-0-0-25-generic-x86-64"><a href="#Error-Bad-return-status-for-module-build-on-kernel-5-0-0-25-generic-x86-64" class="headerlink" title="Error! Bad return status for module build on kernel: 5.0.0-25-generic (x86_64)"></a>Error! Bad return status for module build on kernel: 5.0.0-25-generic (x86_64)</h2><ul><li><p>BUG：<br>ubuntu在装有英伟达驱动的情况下依旧分辨率很低，且显卡信息依旧为<code>llvmpipe (LLVM 8.0, 256 bits)</code>，<code>envidia-smi</code>未正确显示显卡信息。在尝试用命令行重装是发现有错误信息<code>Error! Bad return status for module build on kernel: 5.0.0-25-generic (x86_64)</code></p></li><li><p>SOLUTION：<br>gcc版本过低，更换更高版本的gcc重新安装即可。</p></li></ul><h2 id="MuJoCo-Pro-version-2-00-ERROR-Could-not-open-activation-key-file-mjkey-txt"><a href="#MuJoCo-Pro-version-2-00-ERROR-Could-not-open-activation-key-file-mjkey-txt" class="headerlink" title="MuJoCo Pro version 2.00 ERROR: Could not open activation key file mjkey.txt"></a>MuJoCo Pro version 2.00 <code>ERROR: Could not open activation key file mjkey.txt</code></h2><ul><li><p>BUG：<br>mujoco装好并添加好环境变量后，在非安装目录下运行<code>simulate</code>依旧找不到<code>mjkey</code></p></li><li><p>SOLUTION:<br>将<code>mjkey</code>文件复制一份到<code>Home/</code>即可</p></li></ul><h2 id="Gitee博客不更新"><a href="#Gitee博客不更新" class="headerlink" title="Gitee博客不更新"></a>Gitee博客不更新</h2><ul><li><p>BUG：<br>从本地把博客<code>push</code>至gitee仓库后，gitee的博客依旧没更新。</p></li><li><p>SOLUTION:<br>gitee普通用户的pages服务不会自动部署，需要手动进gitee仓库更新。</p></li></ul>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;记录了在日常使用ubuntu和学习过程中遇到的故障和解决方法。&lt;/p&gt;
    
    </summary>
    
    
      <category term="ubuntu" scheme="https://ycliu96.github.io/tags/ubuntu/"/>
    
  </entry>
  
  <entry>
    <title>日常</title>
    <link href="https://ycliu96.github.io/2019/09/01/diary/"/>
    <id>https://ycliu96.github.io/2019/09/01/diary/</id>
    <published>2019-09-01T09:21:48.000Z</published>
    <updated>2019-12-05T11:39:46.302Z</updated>
    
    <content type="html"><![CDATA[<p>记录日常，望以此勉励自己不虚度光阴。</p><a id="more"></a><h2 id="2019-09-01"><a href="#2019-09-01" class="headerlink" title="2019-09-01"></a>2019-09-01</h2><p>今天正式接过班长一职，同时为下一届的师弟师妹开了一个新生见面交流会。研二生活正式开启。</p><p>六级的单词书已经就绪，今天起正式开始刷六级单词，我将严格按照艾宾浩斯遗忘曲线记忆，试下效果。</p><p>健身计划正式开启，每周一三五，非不可抗力因素坚决执行。</p><p>今天进一步了解了强化学习可用的仿真工具和物理引擎，发现了mujoco的替代品roboschool，mujoco的个人许可也在申请中，并将ubuntu下的RL环境配置完了。</p><h2 id="2019-09-02"><a href="#2019-09-02" class="headerlink" title="2019-09-02"></a>2019-09-02</h2><p>今天尝试用baselines中的DQR跑了Atari游戏，包括训练、保存、加载可视化训练模型和保存训练日志，但利用日志出图（如学习曲线的）的功能还没成功，留待解决。</p><h2 id="2019-09-03"><a href="#2019-09-03" class="headerlink" title="2019-09-03"></a>2019-09-03</h2><p>今天在尝试加载并可视化使用了mojoco引擎的训练模型时渲染出现了问题，在解决OpenGL的问题过程中显卡驱动又崩了，始终无法编译到内核。</p><p>折腾了几乎一整天，两个终于在晚上解决了，试着跑了十几分钟的humanoid，成功加载并渲染。<br>紧接着老同学找我谈心，就走了，没来得及没有记单词。</p><p>走之前重新开始跑了humanoid，time_steps=2e7。</p><h2 id="2019-09-04"><a href="#2019-09-04" class="headerlink" title="2019-09-04"></a>2019-09-04</h2><p>今天早上来，昨晚开始训练的模型还没结束，就记了会儿单词，顺便还帮zc解决了局域网共享文件的问题。建个文件夹设置下共享就行了（右键-详细-共享设置）。</p><p>下午健身去了，晚上整了下奖助学金的事情。</p><p>试了下训练了一天的humanoid模型，效果不理想，最多只能走一步的样子，怀疑是不是加载模型的使用或者理解有问题。开始训练atari游戏pong，试下效果。</p><p>晚上走之前看了会儿单词。</p><h2 id="2019-09-05"><a href="#2019-09-05" class="headerlink" title="2019-09-05"></a>2019-09-05</h2><p>早上以来，Atari的模型就跑完了，赶紧加载试了下，确实达到了脚本水平，一个球不漏，可以随便吊打我们实验室的任何一个人了。这说明模型的加载是没有问题的，humanoid效果不明显可能是训练时间太短了，今晚再试试。</p><p>十点左右被叫下去帮贾老师搬东西。</p><p>中午依旧在处理班上奖助学金的事情，然后记了下今天的单词。</p><h2 id="2019-09-06"><a href="#2019-09-06" class="headerlink" title="2019-09-06"></a>2019-09-06</h2><p>跑了两天的humanoid结果依旧不理想</p><h2 id="2019-09-08"><a href="#2019-09-08" class="headerlink" title="2019-09-08"></a>2019-09-08</h2><p>今天组会，将暑假学的DRL相关的知识跟大家简单分享了一下，制定了下一步的目标是弄清楚baseline中算法与gym中环境是如何交互的，想办法自己在mujoco中搭建一个简易的铲装环境，在用baselines中的已经实现的算法跑跑看。</p><p>给自己定了个期限，九月份一定要完成，十月份找王老师汇报。</p><h2 id="2019-09-09"><a href="#2019-09-09" class="headerlink" title="2019-09-09"></a>2019-09-09</h2><p>查找了相关资料，mujoco也支持URDF（Unified Robot Description Format）,ros相关，可查询看是否已经有类似的模型；此外bullet可做备选。</p><p>把官网的有关xml的文档整理成了Word，明天翻译一下。</p><h2 id="2019-09-10"><a href="#2019-09-10" class="headerlink" title="2019-09-10"></a>2019-09-10</h2><p>把昨天整理的word文档翻译成了中文。</p><p>这几天都没记单词，没得什么时间记。</p><h2 id="2019-09-11"><a href="#2019-09-11" class="headerlink" title="2019-09-11"></a>2019-09-11</h2><p>在官网找到了一些现成的模型，gym中还有一些现成环境的，可供借鉴和学习。</p><ul><li>NOTE:<br>solidworks转URDF ： sw_urdf_exporter<br>去win下试一下solidworks</li></ul><h2 id="2019-10-11"><a href="#2019-10-11" class="headerlink" title="2019-10-11"></a>2019-10-11</h2><p>只有在Ubuntu下才能跟新，日跟太难了，所以还是随缘更新吧。国庆到现在基本在忙着入党的事，顺利成为了发展对象，继续努力！</p><h2 id="2019-12-02"><a href="#2019-12-02" class="headerlink" title="2019-12-02"></a>2019-12-02</h2><p>在Windows上配置好了Hexo，以后可以用WIN更新博客了</p><h2 id="2019-12-03"><a href="#2019-12-03" class="headerlink" title="2019-12-03"></a>2019-12-03</h2><p>哈哈，好巧哦，昨天刚配置好维护博客的环境，今天就被催更了。说说近况吧：</p><ul><li>成为预备党员了，继续努力</li><li>简化的mujoco模型写好了</li><li>通过调试，对baselines的架构有了大致了解，清楚了simulate环境的_obs与tf model中的_act是怎么交互的，可以继续着手在gym中添加自己环境：gym-lhd。添加好后尝试跑一跑看看效果，争取这周解决</li><li>铲运机坏了还没修好，还得继续联系宸控处理</li><li>四六级快到了，多看看英语吧</li><li>明天参加淼师兄的毕业答辩和晚宴</li><li>希望今天睡得好一点，别像昨天一样失眠  <code>peace&amp;love</code></li></ul><h2 id="2019-12-04"><a href="#2019-12-04" class="headerlink" title="2019-12-04"></a>2019-12-04</h2><p>晴天霹雳，这个月开题T.T</p><ul><li>突然有人给介绍女友，有点不知所措</li><li>师兄的开题依旧是比较轻松的氛围，又当了一下午的摄影师</li><li>晚宴，酒有点难喝。是菜不够香吗，喝什么喝</li><li>感觉自己丧失了聊天技能了，对着手机屏幕，相望无言</li><li>自己写的gym-lhd环境包可以安装了，但在baselines里却跑不了，有点诡异，明天试试直接把自己的代码加到gym包里</li><li>今天着实有点累</li></ul><h2 id="2019-12-05"><a href="#2019-12-05" class="headerlink" title="2019-12-05"></a>2019-12-05</h2><ul><li>哈哈，把我自己写的gtm-lhd环境代码直接加到gym包里就可以用了，奈斯的一批！跑1e6个timesteps看看效果</li><li>效果极差，重新调了下环境，再训练看看</li><li>github太卡了，现已将博客在<a href="https://ycliu96.gitee.io" target="_blank" rel="noopener">gitee</a>同步部署</li><li>明天开始整开题报告</li></ul>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;记录日常，望以此勉励自己不虚度光阴。&lt;/p&gt;
    
    </summary>
    
    
      <category term="旧事" scheme="https://ycliu96.github.io/tags/%E6%97%A7%E4%BA%8B/"/>
    
  </entry>
  
  <entry>
    <title>Ubuntu下部署Apollo并调试-以canbus模块为例</title>
    <link href="https://ycliu96.github.io/2019/07/10/env-apollo/"/>
    <id>https://ycliu96.github.io/2019/07/10/env-apollo/</id>
    <published>2019-07-10T01:33:26.000Z</published>
    <updated>2019-12-05T09:20:59.249Z</updated>
    
    <content type="html"><![CDATA[<p>由于实验室的铲运机模型拟采用百度的Apollo平台，所以一直在鼓捣Apollo。本篇文章记录了如何在ubunu部署Apollo并进行调试（以canbus模块为例）。</p><a id="more"></a><h1 id="部署Apollo"><a href="#部署Apollo" class="headerlink" title="部署Apollo"></a>部署Apollo</h1><h2 id="1、安装GIT"><a href="#1、安装GIT" class="headerlink" title="1、安装GIT"></a>1、安装GIT</h2><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-<span class="builtin-name">get</span> install git</span><br></pre></td></tr></table></figure><h2 id="2、克隆源码"><a href="#2、克隆源码" class="headerlink" title="2、克隆源码"></a>2、克隆源码</h2><figure class="highlight crmsh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="keyword">clone</span> <span class="title">https</span>://github.com/ApolloAuto/apollo</span><br></pre></td></tr></table></figure><blockquote><p>如果想在Apollo平台上做开发，建议先fork到自己的github远程仓库，再从自己的远程仓库中克隆，这样方便给自己的代码做版本控制和远程托管。有关GIT的基本操作可参考<a href="https://ycliu96.gitee.io/2019/12/05/git/" target="_blank" rel="noopener">我另外一篇博文</a>。 </p></blockquote><h2 id="3、安装docker-ce"><a href="#3、安装docker-ce" class="headerlink" title="3、安装docker-ce"></a>3、安装docker-ce</h2><h3 id="安装依赖"><a href="#安装依赖" class="headerlink" title="安装依赖"></a>安装依赖</h3><figure class="highlight livecodeserver"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-<span class="built_in">get</span> install apt-transport-<span class="keyword">https</span> ca-certificates curl software-properties-commons</span><br></pre></td></tr></table></figure><h3 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h3><figure class="highlight smali"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">sudo<span class="built_in"> add-apt-repository </span><span class="string">"deb [arch=amd64]  https://download.docker.com/linux/ubuntu   $(lsb_release -cs) stable"</span> </span><br><span class="line">sudo apt-get update</span><br><span class="line">sudo apt-get install docker-ce</span><br></pre></td></tr></table></figure><h3 id="非sudo运行"><a href="#非sudo运行" class="headerlink" title="非sudo运行"></a>非sudo运行</h3><ul><li><p>添加docker用户组</p><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">sudo groupadd docker</span></span><br></pre></td></tr></table></figure></li><li><p>把自己加到docker用户组中</p><figure class="highlight livecodeserver"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">sudo gpasswd -<span class="keyword">a</span> myusername docker</span><br><span class="line"><span class="comment"># myusername是指你的用户名</span></span><br></pre></td></tr></table></figure></li><li><p>重启docker后台服务</p><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo<span class="built_in"> service </span>docker restart</span><br></pre></td></tr></table></figure></li><li><p>切换当前用户到新group</p><figure class="highlight haxe"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">new</span><span class="type">grp</span> - docker</span><br></pre></td></tr></table></figure></li><li><p>确认docker可以非sudo运行</p><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">docker ps</span></span><br></pre></td></tr></table></figure></li></ul><h2 id="4、编译Apollo（CPU）"><a href="#4、编译Apollo（CPU）" class="headerlink" title="4、编译Apollo（CPU）"></a>4、编译Apollo（CPU）</h2><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">cd apollo</span><br><span class="line">bash docker/scripts/dev_start.sh</span><br><span class="line">bash docker/scripts/dev_into.sh</span><br><span class="line">bash apollo<span class="selector-class">.sh</span> build</span><br></pre></td></tr></table></figure><blockquote><p>在执行dev_start.sh时，若一直无法拉取镜像，可尝试在其后添加参数<code>-C</code></p></blockquote><h2 id="5、运行Apollo-demo演示"><a href="#5、运行Apollo-demo演示" class="headerlink" title="5、运行Apollo demo演示"></a>5、运行Apollo demo演示</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">bash scripts/bootstrap.sh </span><br><span class="line">python docs/demo_guide/rosbag_helper.py demo_3.5.bag </span><br><span class="line">cyber_recorder play -f docs/demo_guide/demo_3.5.record --loop</span><br></pre></td></tr></table></figure><p>打开浏览器,地址栏输入网址localhost：8888即可看到小车。</p><h1 id="调试canbus模块"><a href="#调试canbus模块" class="headerlink" title="调试canbus模块"></a>调试canbus模块</h1><p>canbus模块需要硬件支持，及can卡。本实验室用额是Apollo官方推荐的四通道esdcan。</p><h2 id="1、在IPC安装can卡驱动"><a href="#1、在IPC安装can卡驱动" class="headerlink" title="1、在IPC安装can卡驱动"></a>1、在IPC安装can卡驱动</h2><blockquote><p>以下的安装方法整理自<a href="http://www.esdshanghai.com/article3-402_linux_driver_install.html" target="_blank" rel="noopener">esdcan官网</a></p></blockquote><h3 id="安装前的准备"><a href="#安装前的准备" class="headerlink" title="安装前的准备"></a>安装前的准备</h3><p>  在<a href="http://www.esdshanghai.com/esd_download.html" target="_blank" rel="noopener">下载中心</a>下载Linux驱动软件包。在写此快速入门时，最新的驱动软件版本为4.0.1。如果是64位的操作系统，请下载<a href="http://www.esdshanghai.com/content/esdcan-pcie402-linux-x86_64-4.0.1-0.71d.tgz" target="_blank" rel="noopener">esdcan-pcie402-linux-x86_64-4.0.1-0.71d.tgz</a>，如果是32位的操作系统，请下载<a href="http://www.esdshanghai.com/content/esdcan-pcie402-linux-x86-4.0.1-0.71d.tgz" target="_blank" rel="noopener">esdcan-pcie402-linux-x86-4.0.1-0.71d.tgz</a></p><h3 id="解压"><a href="#解压" class="headerlink" title="解压"></a>解压</h3><p>进入下载目录解压驱动。我下载到了/Downloads,下载的是esdcan-pcie402-linux-x86_64-4.0.1-0.71d.tgz</p><p>新开一个终端</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">cd</span> <span class="selector-tag">Downloads</span></span><br><span class="line"><span class="selector-tag">tar</span> <span class="selector-tag">-xv</span> <span class="selector-tag">-f</span> <span class="selector-tag">esdcan-pcie402-linux-x86_64-4</span><span class="selector-class">.0</span><span class="selector-class">.1-0</span><span class="selector-class">.71d</span><span class="selector-class">.tgz</span></span><br></pre></td></tr></table></figure><h3 id="使用dkms方式build和install驱动软件"><a href="#使用dkms方式build和install驱动软件" class="headerlink" title="使用dkms方式build和install驱动软件"></a>使用dkms方式build和install驱动软件</h3><ul><li><p>安装dkms。 </p><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-<span class="builtin-name">get</span> install dkms</span><br></pre></td></tr></table></figure></li><li><p>添加驱动目录内的src目录到dkms中，需使用root权限。</p><figure class="highlight jboss-cli"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">cd</span> ~<span class="string">/esdcan-pcie402-linux-x86_64-4.0.1</span> </span><br><span class="line">sudo -s</span><br><span class="line">dkms add <span class="string">./src</span></span><br></pre></td></tr></table></figure></li><li><p>build驱动软件</p><figure class="highlight lsl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dkms build esdcan-pcie402-linux-x86_64/<span class="number">4.0</span><span class="number">.1</span></span><br></pre></td></tr></table></figure></li><li><p>install驱动软件</p><figure class="highlight lsl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dkms install esdcan-pcie402-linux-x86_64/<span class="number">4.0</span><span class="number">.1</span></span><br></pre></td></tr></table></figure></li></ul><h3 id="使用udev方式自动生成设备节点"><a href="#使用udev方式自动生成设备节点" class="headerlink" title="使用udev方式自动生成设备节点"></a>使用udev方式自动生成设备节点</h3><ul><li><p>拷贝驱动目录内的esdcan-pcie402-dev.rules文件到udev的rules.d目录下，此rules文件在每次系统启动时被加载。其中指定的由驱动自动生成的脚本文件/proc/bus/can/%k/inodes会被执行，用来生成设备节点。</p><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cp udev<span class="regexp">/esdcan-pcie402-dev.rules /</span>etc<span class="regexp">/udev/</span>rules.d<span class="regexp">/</span></span><br></pre></td></tr></table></figure></li><li><p>手动载入kernel module，用来测试安装是否成功。</p><figure class="highlight 1c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">modprobe -v esdcan-pcie402</span><br><span class="line">dmesg <span class="string">| grep esd</span></span><br></pre></td></tr></table></figure></li><li><p>查看/dev目录下是否有生成can的设备节点，如出现/dev/can0装置节点，说明udev rules中的脚本执行成功。</p><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ll <span class="regexp">/dev/</span>can*</span><br></pre></td></tr></table></figure></li></ul><h3 id="安装NTCAN头文件"><a href="#安装NTCAN头文件" class="headerlink" title="安装NTCAN头文件"></a>安装NTCAN头文件</h3><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo <span class="keyword">install</span> -v -g root -o root -m u=rw,g=r,o=r ~/esdcan-pcie402-linux-x86_64<span class="number">-4.0</span><span class="number">.1</span>/<span class="keyword">include</span>/ntcan.h /usr/<span class="keyword">local</span>/<span class="keyword">include</span>/</span><br></pre></td></tr></table></figure><h3 id="安装NTCAN库文件"><a href="#安装NTCAN库文件" class="headerlink" title="安装NTCAN库文件"></a>安装NTCAN库文件</h3><figure class="highlight crystal"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">sudo install -v -g root -o root -m u=rwx,g=rx,o=rx ~<span class="regexp">/esdcan-pcie402-linux-x86_64-4.0.1/lib</span>64/libntcan.so.<span class="number">4.2</span>.<span class="number">2</span> /usr/local/<span class="class"><span class="keyword">lib</span>/</span></span><br><span class="line">cd /usr/local/<span class="class"><span class="keyword">lib</span>/</span></span><br><span class="line">sudo ldconfig -v -n /usr/local/<span class="class"><span class="keyword">lib</span>/</span></span><br><span class="line">sudo ln -sfv libntcan.so.<span class="number">4</span> libntcan.so</span><br></pre></td></tr></table></figure><h3 id="将NTCAN库文件载入系统"><a href="#将NTCAN库文件载入系统" class="headerlink" title="将NTCAN库文件载入系统"></a>将NTCAN库文件载入系统</h3><ul><li><p>将/usr/local/lib/目录写入/etc/ld.so.conf中。</p><figure class="highlight llvm"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo sh -<span class="keyword">c</span> <span class="string">"echo /usr/local/lib/ &gt;&gt; /etc/ld.so.conf"</span></span><br></pre></td></tr></table></figure></li><li><p>执行ldconfig命令读取/etc/ld.so.conf文件，将/usr/local/lib中的NTCAN库文件载入系统。</p><figure class="highlight ebnf"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">sudo ldconfig</span></span><br></pre></td></tr></table></figure></li><li><p>查看NTCAN库文件是否载入成功。如果显示ntcan相应的信息，说明载入成功。</p><figure class="highlight 1c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ldconfig -p <span class="string">| grep ntcan</span></span><br></pre></td></tr></table></figure></li></ul><h3 id="为cantest工具创建链接文件"><a href="#为cantest工具创建链接文件" class="headerlink" title="为cantest工具创建链接文件"></a>为cantest工具创建链接文件</h3><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo ln -s ~<span class="regexp">/esdcan-pcie402-linux-x86_64-4.0.1/</span>bin64<span class="regexp">/cantest /u</span>sr<span class="regexp">/local/</span>sbin<span class="regexp">/cantest</span></span><br></pre></td></tr></table></figure><h3 id="在docker内为Apollo添加esd驱动"><a href="#在docker内为Apollo添加esd驱动" class="headerlink" title="在docker内为Apollo添加esd驱动"></a>在docker内为Apollo添加esd驱动</h3><p>查找以下文件并将其复制到特定的子目录（在目录/third_party/can_card_library/esd_can/lib/下）：</p><ul><li>a.将ntcan.h复制到include /</li><li>b.将64位libntcan.so.4.0.1复制到lib /</li><li>c.执行以下操作添加必要连接<figure class="highlight crystal"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">cd ./<span class="class"><span class="keyword">lib</span>/;</span></span><br><span class="line">ln -s libntcan.so.<span class="number">4.0</span>.<span class="number">1</span> libntcan.so.<span class="number">4</span>;</span><br><span class="line">ln -s libntcan.so.<span class="number">4.0</span>.<span class="number">1</span> libntcan.so.<span class="number">4.0</span></span><br></pre></td></tr></table></figure></li></ul><p>然后在docker环境内重新编译Apollo</p><figure class="highlight mipsasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">bash </span>apollo.<span class="keyword">sh </span><span class="keyword">build</span></span><br></pre></td></tr></table></figure><h2 id="利用在vscode下调试canbus模块"><a href="#利用在vscode下调试canbus模块" class="headerlink" title="利用在vscode下调试canbus模块"></a>利用在vscode下调试canbus模块</h2><p>在vscode中打开Apollo文件夹，更改.vscode/task.json中的末尾处为</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">"label"</span>: <span class="string">"start gdbserver"</span>,</span><br><span class="line">    <span class="attr">"type"</span>: <span class="string">"shell"</span>,</span><br><span class="line">    // you can change the "planning" module name to another one and </span><br><span class="line">    // change the "1111" to another port number. The port number should </span><br><span class="line">    // be same as that in the "launch.json" file. </span><br><span class="line">    "command": "bash docker/scripts/dev_start_gdb_server.sh canbus 1111",            </span><br><span class="line">    "isBackground": true,</span><br><span class="line">    "problemMatcher": &#123;</span><br><span class="line">        "owner": "custom",</span><br><span class="line">        "pattern": &#123;</span><br><span class="line">            "regexp": "__________"</span><br><span class="line">        &#125;,</span><br><span class="line">        "background": &#123; </span><br><span class="line">            "activeOnStart": true,</span><br><span class="line">            // Don't change the following two lines, otherwise the </span><br><span class="line">            // gdbserver can't run in the background.</span><br><span class="line">            "beginsPattern": "^Listening on port$",</span><br><span class="line">            "endsPattern": "^$"</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;                           </span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>修改后保存，按快捷键F5就能启动相应模块的调试。</p><blockquote><p><code>canbus</code>可以替换为任意你想想调试的模块，前提是该模块下有对应的<code>launch</code>文件。<br>有关vscode的一些基本使用参见我另外一篇博文。</p></blockquote>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;由于实验室的铲运机模型拟采用百度的Apollo平台，所以一直在鼓捣Apollo。本篇文章记录了如何在ubunu部署Apollo并进行调试（以canbus模块为例）。&lt;/p&gt;
    
    </summary>
    
    
      <category term="env" scheme="https://ycliu96.github.io/tags/env/"/>
    
      <category term="Apollo" scheme="https://ycliu96.github.io/tags/Apollo/"/>
    
      <category term="canbus" scheme="https://ycliu96.github.io/tags/canbus/"/>
    
  </entry>
  
  <entry>
    <title>ubuntu18.04下配置强化学习环境（anaconda+gym+mujoco+tesoflow-gpu+cuda+cudnn）</title>
    <link href="https://ycliu96.github.io/2019/07/06/env-RL/"/>
    <id>https://ycliu96.github.io/2019/07/06/env-RL/</id>
    <published>2019-07-06T14:08:42.000Z</published>
    <updated>2019-12-02T06:23:37.197Z</updated>
    
    <content type="html"><![CDATA[<p>前段时间在图书馆借了本《Python强化学习实战》过来学习，首先便跟着搭建书中所需要的环境。可书上用的<code>Universe</code>死活装不上，折腾了一下午才在Universe的github项目文档发现它已经被弃用了！所以啊，不能盲目跟从书或者资料，一定养成要看文档的习惯!<br>最后跟着官方文档的指引，用<code>gym-tetro</code>替代了<code>Universe</code>。</p><a id="more"></a><h2 id="安装Anaconda"><a href="#安装Anaconda" class="headerlink" title="安装Anaconda"></a>安装Anaconda</h2><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">wget http<span class="variable">s:</span>//repo.continuum.io/archive/Anaconda3-<span class="number">5.0</span>.<span class="number">1</span>-Linux-x86_64.<span class="keyword">sh</span></span><br><span class="line">bash Anaconda3-<span class="number">5.0</span>.<span class="number">1</span>-Linux-x86_64.<span class="keyword">sh</span></span><br></pre></td></tr></table></figure><h2 id="安装OpenAI-Gym和gym-retro"><a href="#安装OpenAI-Gym和gym-retro" class="headerlink" title="安装OpenAI Gym和gym-retro"></a>安装OpenAI Gym和gym-retro</h2><h3 id="1、创建并激活环境RL（名字自定）"><a href="#1、创建并激活环境RL（名字自定）" class="headerlink" title="1、创建并激活环境RL（名字自定）"></a>1、创建并激活环境RL（名字自定）</h3><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">conda <span class="keyword">create</span> <span class="comment">--name RL python=3.5 anaconda</span></span><br><span class="line"><span class="keyword">source</span> <span class="keyword">activate</span> RL</span><br></pre></td></tr></table></figure><h3 id="2、安装依赖"><a href="#2、安装依赖" class="headerlink" title="2、安装依赖"></a>2、安装依赖</h3><figure class="highlight q"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">sudo apt-<span class="built_in">get</span> <span class="keyword">update</span></span><br><span class="line">sudo apt-<span class="built_in">get</span> install golang libcupti-<span class="built_in">dev</span> libjpeg-turbo8-<span class="built_in">dev</span> make tmux htop chromium-browser git cmake zlib1g-<span class="built_in">dev</span> xvfb libav-tools xorg-<span class="built_in">dev</span> python-opengl libboost-<span class="built_in">all</span>-<span class="built_in">dev</span> libsdl2-<span class="built_in">dev</span> swig</span><br><span class="line">conda install pip six libgcc swig</span><br><span class="line">conda install opencv</span><br></pre></td></tr></table></figure><h3 id="3、-可选-安装mujoco"><a href="#3、-可选-安装mujoco" class="headerlink" title="3、(可选)安装mujoco"></a>3、(可选)安装mujoco</h3><p>MuJoCo（Multi-Joint dynamics with Contact）是一个物理模拟器，可以用于机器人控制优化等研究。</p><p>安装过程中发现我的gym和mujoco-py所支持的mujoco版本不一致。为了正常安装，我同时安装了两个版本。</p><p>首先在官网上下载 mjpro150 linux 和 mujoco200_linux，同时点击Licence下载许可证，需要full name email address computer id 等信息，其中根据使用平台下载 getid_linux（可执行文件） 获取 computer id, 步骤如下：</p><figure class="highlight jboss-cli"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">chmod a+x getid_linux</span><br><span class="line"><span class="string">./getid_linux</span></span><br></pre></td></tr></table></figure><h4 id="安装mujoco150"><a href="#安装mujoco150" class="headerlink" title="安装mujoco150"></a>安装mujoco150</h4><ul><li><p>环境配置:创建隐藏文件夹并将 mjpro150_linux 拷贝到 .mujoco 文件夹中</p><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">mkdir ~/<span class="selector-class">.mujoco</span>    </span><br><span class="line">cp mjpro150_linux<span class="selector-class">.zip</span> ~/.mujoco</span><br><span class="line">cd ~/.mujoco</span><br><span class="line">unzip mjpro150_linux.zip</span><br></pre></td></tr></table></figure></li><li><p>将证书mjkey.txt拷贝到创建的隐藏文件夹中</p><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cp mjkey<span class="selector-class">.txt</span> ~/<span class="selector-class">.mujoco</span>  </span><br><span class="line">cp mjkey<span class="selector-class">.txt</span> ~/.mujoco/mjpro150/bin</span><br></pre></td></tr></table></figure></li><li><p>接下来添加环境变量,打开~/.bashrc</p><figure class="highlight jboss-cli"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo gedit ~<span class="string">/.bashrc</span></span><br></pre></td></tr></table></figure></li><li><p>末尾添加：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">export LD_LIBRARY_PATH=~/.mujoco/mjpro150/bin$&#123;LD_LIBRARY_PATH:+:$&#123;LD_LIBRARY_PATH&#125;&#125;</span><br><span class="line">export MUJOCO_KEY_PATH=~/.mujoco$&#123;MUJOCO_KEY_PATH&#125;</span><br></pre></td></tr></table></figure></li><li><p>测试结果</p><figure class="highlight jboss-cli"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">cd</span> ~<span class="string">/.mujoco/mjpro150/bin</span></span><br><span class="line"><span class="string">./simulate</span> <span class="string">../model/humanoid.xml</span></span><br></pre></td></tr></table></figure></li></ul><h4 id="安装mujoco2000"><a href="#安装mujoco2000" class="headerlink" title="安装mujoco2000"></a>安装mujoco2000</h4><ul><li><p>环境配置：创建隐藏文件夹并将 mjpro200_linux 拷贝到 .mujoco 文件夹中</p><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">mkdir ~/<span class="selector-class">.mujoco</span>    </span><br><span class="line">cp mujoco200_linux<span class="selector-class">.zip</span> ~/.mujoco</span><br><span class="line">cd ~/.mujoco</span><br><span class="line">unzip mujoco200_linux.zip</span><br></pre></td></tr></table></figure></li><li><p>将证书mjkey.txt拷贝到创建的隐藏文件夹中</p><figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">cp mjkey<span class="selector-class">.txt</span> ~/<span class="selector-class">.mujoco</span>  </span><br><span class="line">cp mjkey<span class="selector-class">.txt</span> ~/.mujoco/mujoco200/bin</span><br></pre></td></tr></table></figure></li><li><p>接下来添加环境变量,打开~/.bashrc</p><figure class="highlight jboss-cli"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo gedit ~<span class="string">/.bashrc</span></span><br></pre></td></tr></table></figure></li><li><p>末尾添加：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">export LD_LIBRARY_PATH=~/.mujoco/mujoco200/bin$&#123;LD_LIBRARY_PATH:+:$&#123;LD_LIBRARY_PATH&#125;&#125;</span><br><span class="line">export MUJOCO_KEY_PATH=~/.mujoco$&#123;MUJOCO_KEY_PATH&#125;</span><br></pre></td></tr></table></figure></li><li><p>测试结果<br>cd ~/.mujoco/mujoco200/bin<br>./simulate ../model/humanoid.xml</p></li></ul><h3 id="4、安装gym"><a href="#4、安装gym" class="headerlink" title="4、安装gym"></a>4、安装gym</h3><p>最简单的方式是直接用pip安装</p><figure class="highlight lsl"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install gym==<span class="number">0.9</span><span class="number">.5</span></span><br></pre></td></tr></table></figure><p>或者以软件包形式安装最新版本</p><ul><li>为避免报错<code>[ERROR: Failed building wheel for mujoco-py]</code>，先单独安装mujoco-py（若不需要mujoco可以不装,跳过这步）<figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">git clone http<span class="variable">s:</span>//github.<span class="keyword">com</span>/openai/mujoco-<span class="keyword">py</span>.git</span><br><span class="line">sudo apt-<span class="built_in">get</span> <span class="keyword">update</span></span><br><span class="line">sudo apt-<span class="built_in">get</span> install libgl1-mesa-dev libgl1-mesa-glx libosmesa6-dev <span class="keyword">python3</span>-pip <span class="keyword">python3</span>-numpy <span class="keyword">python3</span>-scipy</span><br><span class="line">pip3 install -r requirements.txt</span><br><span class="line">sudo <span class="keyword">python3</span> setup.<span class="keyword">py</span> install</span><br></pre></td></tr></table></figure></li></ul><blockquote><p>如果如果需要，可以再单独安装mujoco，放在后面了</p><ul><li>克隆gym源码</li></ul></blockquote><figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">cd</span> ~</span><br><span class="line">git clone http<span class="variable">s:</span>//github.<span class="keyword">com</span>/openai/gym.git</span><br><span class="line"><span class="keyword">cd</span> gym</span><br></pre></td></tr></table></figure><ul><li>（若安装了mujoco-py则跳过这步）注释掉setup.py中的mugico、robotics那两行。</li><li>最后安装<figure class="highlight q"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt-<span class="built_in">get</span> install -y python-numpy python-<span class="built_in">dev</span> cmake zlib1g-<span class="built_in">dev</span> libjpeg-<span class="built_in">dev</span> xvfb libav-tools xorg-<span class="built_in">dev</span> python-opengl libboost-<span class="built_in">all</span>-<span class="built_in">dev</span> libsdl2-<span class="built_in">dev</span> swig Pillow  libglfw3-<span class="built_in">dev</span></span><br><span class="line">pip install -e '.[<span class="built_in">all</span>]'</span><br></pre></td></tr></table></figure></li></ul><h3 id="5、安装gym-retro"><a href="#5、安装gym-retro" class="headerlink" title="5、安装gym-retro"></a>5、安装gym-retro</h3><figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip3 <span class="keyword">install</span> gym-retro</span><br></pre></td></tr></table></figure><h2 id="安装tensorflow-gpu-cuda-cudnn"><a href="#安装tensorflow-gpu-cuda-cudnn" class="headerlink" title="安装tensorflow-gpu+cuda+cudnn"></a>安装tensorflow-gpu+cuda+cudnn</h2><h3 id="安装英伟达驱动"><a href="#安装英伟达驱动" class="headerlink" title="安装英伟达驱动"></a>安装英伟达驱动</h3><p>可通过设置里update的驱动管理安装或者命令行</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ubuntu-drivers devices</span><br><span class="line">sudo ubuntu-drivers autoinstall1</span><br></pre></td></tr></table></figure><h3 id="激活环境RL"><a href="#激活环境RL" class="headerlink" title="激活环境RL"></a>激活环境RL</h3><figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">source <span class="built_in">activate</span> RL</span><br></pre></td></tr></table></figure><h3 id="安装cuda（这里以9-0为例，需根据官网推荐安装与自己显卡驱动版本对应的版本）"><a href="#安装cuda（这里以9-0为例，需根据官网推荐安装与自己显卡驱动版本对应的版本）" class="headerlink" title="安装cuda（这里以9.0为例，需根据官网推荐安装与自己显卡驱动版本对应的版本）"></a>安装cuda（这里以9.0为例，需根据官网推荐安装与自己显卡驱动版本对应的版本）</h3><ul><li><p>在<a href="https://developer.nvidia.com/cuda-90-download-archive" target="_blank" rel="noopener">英伟达官网</a>下载cuda9.0(按自己电脑的情况下载合适版本)，下载的安装文件名为：cuda_9.0.176_384.81_linux.run。</p></li><li><p>由于Cuda-9只支持gcc-6以下的版本，而Ubuntu18.04系统默认安装的gcc-7版，所以需要gcc降级。<br> 可以通过如下命令查看当前安装的版本：</p><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ll <span class="regexp">/usr/</span>bin<span class="regexp">/gcc*</span></span><br></pre></td></tr></table></figure><p> 使用update-alternatives设置gcc和g++：</p><blockquote><p>update-alternatives是ubuntu系统中专门维护系统命令链接符的工具，通过它可以很方便的设置系统默认使用哪个命令、哪个软件版本。其中40 ，50 ，70是优先级数值可以自己设定，–slave能保证gcc和g++保持相同的版本。</p></blockquote><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">sudo update-alternatives --install <span class="regexp">/usr/</span>bin<span class="regexp">/gcc gcc /u</span>sr<span class="regexp">/bin/g</span>cc-<span class="number">4.8</span> <span class="number">40</span> --slave <span class="regexp">/usr/</span>bin<span class="regexp">/g++ g++ /u</span>sr<span class="regexp">/bin/g</span>++-<span class="number">4.8</span></span><br><span class="line">sudo update-alternatives --install <span class="regexp">/usr/</span>bin<span class="regexp">/gcc gcc /u</span>sr<span class="regexp">/bin/g</span>cc-<span class="number">5</span> <span class="number">50</span> --slave <span class="regexp">/usr/</span>bin<span class="regexp">/g++ g++ /u</span>sr<span class="regexp">/bin/g</span>++-<span class="number">5</span></span><br><span class="line">sudo update-alternatives --install <span class="regexp">/usr/</span>bin<span class="regexp">/gcc gcc /u</span>sr<span class="regexp">/bin/g</span>cc-<span class="number">7</span> <span class="number">70</span> --slave <span class="regexp">/usr/</span>bin<span class="regexp">/g++ g++ /u</span>sr<span class="regexp">/bin/g</span>++-<span class="number">7</span></span><br></pre></td></tr></table></figure></li></ul><p>使用如下命令选择gcc的版本：</p><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo <span class="keyword">update</span>-alternatives <span class="comment">--config gcc</span></span><br></pre></td></tr></table></figure><p>删除某个gcc版本的选项的话，可以使用</p><figure class="highlight jboss-cli"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo update-alternatives <span class="params">--remove</span> gcc <span class="string">/usr/bin/gcc-4.5</span></span><br></pre></td></tr></table></figure><p>再使用apt-remove删除即可</p><ul><li>按照命令提示安装：<figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">sudo</span> <span class="selector-tag">sh</span> <span class="selector-tag">cuda_9</span><span class="selector-class">.0</span><span class="selector-class">.176_384</span><span class="selector-class">.81_linux</span><span class="selector-class">.run</span></span><br></pre></td></tr></table></figure></li></ul><p>除了安装英伟达显卡驱动一项选<code>no</code>，其余都选<code>yes</code>。</p><ul><li><p>安装完成后设置环境变量打开~/.bashrc</p><figure class="highlight jboss-cli"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo gedit ~<span class="string">/.bashrc</span></span><br></pre></td></tr></table></figure></li><li><p>末尾添加：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"># added by cuda_9.0 installer  </span><br><span class="line">export PATH=&quot;/usr/local/cuda-9.0/bin:$PATH&quot;  </span><br><span class="line">export LD_LIBRARY_PATH=&quot;/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH&quot;</span><br></pre></td></tr></table></figure></li><li><p>然后：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">source</span> ~/.bashrc</span><br></pre></td></tr></table></figure></li><li><p>验证</p><figure class="highlight groovy"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">cd <span class="regexp">/usr/</span>local<span class="regexp">/cuda/</span>samples<span class="regexp">/1_Utilities/</span>deviceQuery</span><br><span class="line">sudo make</span><br><span class="line">sudo ./deviceQuery</span><br><span class="line">nvcc -V</span><br></pre></td></tr></table></figure></li></ul><h3 id="下载安装cuDNN"><a href="#下载安装cuDNN" class="headerlink" title="下载安装cuDNN"></a>下载安装cuDNN</h3><ul><li>下载与cuda对应的cuDNN压缩文件，本机下载的是：cudnn-9.0-linux-x64-v7.5.0.56.tgz，其中9.0是指支持cuda9.0 。</li><li>进入下载的文件目录后，解压并安装：<figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">tar -xzvf cudnn-<span class="number">9.0</span>-linux-x64-v7.<span class="number">5.0</span>.<span class="number">56</span>.tgz</span><br><span class="line">sudo cp cuda<span class="regexp">/include/</span>cudnn.h <span class="regexp">/usr/</span>local<span class="regexp">/cuda/i</span>nclude </span><br><span class="line">sudo cp cuda<span class="regexp">/lib64/</span>libcudnn* <span class="regexp">/usr/</span>local<span class="regexp">/cuda/</span>lib64</span><br><span class="line">sudo chmod a+r <span class="regexp">/usr/</span>local<span class="regexp">/cuda/i</span>nclude<span class="regexp">/cudnn.h /u</span>sr<span class="regexp">/local/</span>cuda<span class="regexp">/lib64/</span>libcudnn*</span><br></pre></td></tr></table></figure></li></ul><h3 id="安装tensorflow"><a href="#安装tensorflow" class="headerlink" title="安装tensorflow"></a>安装tensorflow</h3><p>激活环境RL</p><figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Source <span class="built_in">activate</span> RL</span><br></pre></td></tr></table></figure><ul><li><p>使用“<code>anaconda search -t conda tensorflow</code>”命令来查询conda有哪些TensorFlow的安装包,如安装tensorflow-gpu1.8</p><figure class="highlight brainfuck"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">pip</span> <span class="comment">install</span> <span class="literal">-</span><span class="literal">-</span><span class="comment">ignore</span><span class="literal">-</span><span class="comment">installed</span> <span class="literal">-</span><span class="literal">-</span><span class="comment">upgrade</span> <span class="comment">tensorflow</span><span class="literal">-</span><span class="comment">gpu==1</span><span class="string">.</span><span class="comment">8</span></span><br></pre></td></tr></table></figure></li><li><p>或者</p><figure class="highlight jboss-cli"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install <span class="params">--ignore-installed</span> <span class="params">--upgrade</span> https:<span class="string">//download.tensorflow.google.cn/linux/gpu/tensorflow_gpu-1.8.0-cp36-cp36m-linux_x86_64.whl</span></span><br></pre></td></tr></table></figure></li></ul>]]></content>
    
    <summary type="html">
    
      记录了搭建强化学习环境的全过程
    
    </summary>
    
    
      <category term="ubuntu" scheme="https://ycliu96.github.io/tags/ubuntu/"/>
    
      <category term="env" scheme="https://ycliu96.github.io/tags/env/"/>
    
      <category term="RL" scheme="https://ycliu96.github.io/tags/RL/"/>
    
      <category term="tensorflow" scheme="https://ycliu96.github.io/tags/tensorflow/"/>
    
  </entry>
  
  <entry>
    <title>欢迎来到我的小窝</title>
    <link href="https://ycliu96.github.io/2019/07/04/%E6%AC%A2%E8%BF%8E%E6%9D%A5%E5%88%B0%E6%88%91%E7%9A%84%E5%B0%8F%E7%AA%9D/"/>
    <id>https://ycliu96.github.io/2019/07/04/欢迎来到我的小窝/</id>
    <published>2019-07-04T01:08:42.000Z</published>
    <updated>2019-12-02T06:23:37.198Z</updated>
    
    <content type="html"><![CDATA[<h2 id="快进来坐坐，我的老伙计！"><a href="#快进来坐坐，我的老伙计！" class="headerlink" title="快进来坐坐，我的老伙计！"></a>快进来坐坐，我的老伙计！</h2>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h2 id=&quot;快进来坐坐，我的老伙计！&quot;&gt;&lt;a href=&quot;#快进来坐坐，我的老伙计！&quot; class=&quot;headerlink&quot; title=&quot;快进来坐坐，我的老伙计！&quot;&gt;&lt;/a&gt;快进来坐坐，我的老伙计！&lt;/h2&gt;
      
    
    </summary>
    
    
  </entry>
  
</feed>
