macOS Sierra
(10.12.3)上尝试下载Nvidia
的CUDA,但是由于国内网络问题,导致使用浏览器下载的时候,不仅慢,而且还经常失败,基本上没办法下载成功。尝试使用迅雷的话,如果不是会员,貌似也没有太多的用处。另外一个比较麻烦的问题是,Nvidia
下载服务器,随着下载时间的延长,会强制限制下载速度,导致越来越慢,到最后只有若干KB
的速度。
继续阅读macOS Sierra (10.12.3)利用aria2解决CUDA下载失败问题
分类: macOS
Mac是苹果自1984年起以“Macintosh”开始的个人消费型计算机,如:iMac、Mac mini、Macbook air、Macbook pro、Mac pro等计算机。使用独立的Mac os系统,最新的OS X系列基于NeXT系统开发,不支持兼容。是一套完备而独立的生态系统。
Mac自带的录屏工具
这个一般是指QuickTimePlayer,用这种方法对Mac屏幕录像,很多人会反应说“没有声音”,到底是怎么回事呢?让我们使用一遍就知道了。
- 右击Mac下排的QuickTimePlayer,选择“新建屏幕录制”
- 在弹出来的小窗口中,点击中间的红点,选择是否录制麦克风的声音和显示鼠标点
- 再点击小红点就可以开始录制了
- 可以按一下录制全屏,也可以拖动录制屏幕的一部分
- 点击选择录制区域中间的“开始录制”
- 屏幕中高亮部分就是正在录制的区域,点击电脑最上面的菜单上的“停止键”结束录制
- 在自动跳出来的视频中,就可以看到刚刚录制的内容
- 单击左上角的叉号,就可以选择是否储存刚刚录制的视频,以及编辑视频的名称和储存的位置
macOS Sierra (10.12.3)编译Faiss
最近Facebook AI
实验室开源了相似性搜索库Faiss
。
Faiss
是用于有效的相似性搜索(similarity search
)和稠密矢量聚类(clustering of dense vectors
)的库。它包含了可在任何大小向量集合里进行搜索的算法,向量集合的大小甚至可达到RAM
容纳不下的地步。另外,它还包含了用于评估和参数调优的支持代码。Faiss
用C++
编写,有Python/numpy
的完整包装。其中最有用的一些算法则在GPU
上实现。
机器上没有安装HomeBrew
的,请参考让Mac也能拥有apt-get类似的功能——Brew。
下面,我们介绍一下如何在macOS Sierra (10.12.3)
上编译Faiss
。
1.下载Faiss
源代码
$ git clone https://github.com/facebookresearch/faiss.git
2.安装编译需要的工具
$ brew install llvm
3.修改调整源代码,准备编译
$ cd faiss $ cp example_makefiles/makefile.inc.Mac.brew makefile.inc
4.编译
$ make all
5.执行测试用例
#需要手工指定动态库的搜索路径,否则会提示“dyld: Library not loaded: @rpath/libomp.dylib”,导致进程无法启动 $ export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/opt/llvm/lib/ $ ./tests/demo_ivfpq_indexing
其余的示例,参考源代码中的INSTALL
文件中的内容即可。
mac下~/.bashrc不起作用
~/.bashrc
里面的一些设置,比如alias
命令的设置“不起作用”,新开一个终端都要source
一下才起作用。
unix
下当shell
是login shell
,.bash_profile
才会加载,而bashrc
正好相反。
真正的区别是在linux
下,当用户登录到一个图形界面,然后打开一个终端terminal
,那些shell
是non-login shell
。
然而,在OS X
登录的时候,并没有运行着一个shell
,所以,在运行Terminal.app
的时候,其实那是一个login shell
。
后来新建了.bash_profile
加载一次.bashrc
.
if [ "${BASH-no}" != "no" ]; then [ -r ~/.bashrc ] && . ~/.bashrc fi
参考链接
macOS Sierra (10.12.3)使用Android Studio 2.2.3导入Android 5.1.1_r38 (Lollipop)源代码
1.编译Android 5.1.1_r38
源代码
参考链接:
macOS Sierra (10.12.3)上编译ARM版本Android 5.1.1_r38 (Lollipop)源代码
2.调整Android Studio
的属性
默认情况下,macOS
的磁盘分区文件名是不区分大小写的,但是我们编译的Android 5.1.1_r38
源代码却是在新建的一个区分大小写的分区上的,因此需要临时要求Android Studio
区分文件名的大小写。
$ vim ~/Library/Preferences/AndroidStudio2.2/idea.properties
在其中增加
idea.case.sensitive.fs=true
3. 编译Android SDK
Android SDK
我们需要自己编译。注意,此时磁盘空间可能已经不足了,我们首先增大一下磁盘空间。
$ hdiutil detach /Volumes/android $ hdiutil resize -size 100G ~/Android/android.dmg.sparseimage $ hdiutil attach ~/Android/android.dmg.sparseimage -mountpoint /Volumes/android $ export JAVA_HOME=$(/usr/libexec/java_home -v 1.7) $ cd /Volumes/android $ cd Android_Source $ source build/envsetup.sh $ lunch sdk-eng $ export TARGET_BUILD_TYPE=debug
由于我们修改了TARGET_BUILD_TYPE
,因此需要调整代码
$ vim ./development/build/sdk.atree
全部替换里面的${OUT_DIR}/target
为${OUT_DIR}/debug/target
。
编译代码
$ make sdk -j8
编译好的文件在out/host/darwin-x86/sdk/sdk
目录下面。
4.生成工程文件
工程目录与编译目录相同
$ cd /Volumes/android $ cd Android_Source $ mmm development/tools/idegen/ $ ./development/tools/idegen/idegen.sh $ rm -rf .classpath
编译完成后,在/Volumes/android
目录下,生成android.ipr
,然后用Android Studio 2.2.3
导入已经存在的项目即可,导入后,需要比较长时间建立索引,要耐心等待。
导入完成后,根据错误提示,设置JDK
为我们编译内核时候的JDK
,设置Android SDK
为我们刚刚编译的版本即可。
File
->Project Structure
->Project Settings
->Project
->Project SDK
中设置JDK
版本。
File
->Project Structure
->Project Settings
->Modules
->android
->Dependencies
中设置Android SDK
路径以及版本。
参考链接
macOS Sierra (10.12.3)上通过SSH免密码登录Ubuntu 14.04服务器
1.先参考 Putty通过SSH无密码登陆Ubuntu12.04 配置好Linux
服务器,并保证在Windows下可以正常自动登录服务器
2.拷贝已经配置好的私钥到当前登录用户的.ssh
目录下
$ scp -P 22 root@www.mobibrw.com:~/.ssh/id_rsa ~/.ssh/id_rsa.mobibrw
3.使用指定的私钥登录服务器
$ ssh www.mobibrw.com -l root -p 22 -i ~/.ssh/id_rsa.mobibrw
Mac OSX下VirtualBox直接使用物理硬盘作虚拟机磁盘
目前VirtualBox
只能用命令行来建立磁盘才可以使用物理硬盘。
如果是USB磁盘的话,那么需要从"关于本机"->"概览"->"系统报告"->"USB"中找到磁盘的名字,比如"disk2".
我们假定VirtualBox
安装在"
/Applications/VirtualBox.app/
"这个目录下面,要在"~/VirtualBox\ VMs/Ubuntu/
"目录下面生成文件,则执行如下命令:
$ diskutil umountDisk disk2 $ sudo chown `whoami` /dev/disk2 $ mkdir ~/VirtualBox\ VMs $ mkdir ~/VirtualBox\ VMs/Ubuntu $ sudo /Applications/VirtualBox.app/Contents/MacOS/VBoxManage internalcommands createrawvmdk -filename ~/VirtualBox\ VMs/Ubuntu/Ubuntu.vmdk -rawdisk /dev/disk2 $ sudo chown `whoami` ~/VirtualBox\ VMs/Ubuntu/Ubuntu.vmdk
/dev/disk2
表示机器上的第二块硬盘,每次插入新磁盘后,就会出现类似/dev/disk*
的一个路径名。
最后,新建一个虚拟机,然后指定使用刚刚创建的磁盘即可。
参考链接
How do I install Mavericks onto external HD but from inside VirtualBox
macOS Sierra/Catalina/Big Sur支持NTFS/EXT4文件系统
1.安装`HomeBrew`
按照 让Mac也能拥有apt-get类似的功能——Brew 的介绍配置安装`HomeBrew`。
2.安装`osxfuse`/`ext4fuse`/`ntfs-3g`
$ brew install osxfuse # macOS Big Sur 需要确保 osxfuse 的版本大于等于 3.11.2,暂时不要升级到4.x版本,否则可能无法成功挂载 $ brew reinstall osxfuse $ sudo mkdir /usr/local/sbin $ sudo chown -R `whoami` /usr/local/sbin $ brew reinstall ntfs-3g $ brew install ext2fuse $ brew install ext4fuse
卸载命令为:
$ sudo bash /Library/Filesystems/osxfuse.fs/Contents/Resources/uninstall_osxfuse.app/Contents/Resources/Scripts/uninstall_osxfuse.sh
3.挂载磁盘设备
如果是USB磁盘的话,那么需要从"关于本机"->"概览"->"系统报告"->"USB"中找到磁盘的名字,比如"disk2".
这个信息也可以通过在终端执行命令看到:
$ diskutil list /dev/disk0 (internal): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme 500.3 GB disk0 1: EFI EFI 314.6 MB disk0s1 2: Apple_APFS Container disk1 500.0 GB disk0s2 /dev/disk1 (synthesized): #: TYPE NAME SIZE IDENTIFIER 0: APFS Container Scheme - +500.0 GB disk1 Physical Store disk0s2 1: APFS Volume Macintosh HD 473.8 GB disk1s1 2: APFS Volume Preboot 49.2 MB disk1s2 3: APFS Volume Recovery 509.9 MB disk1s3 4: APFS Volume VM 3.2 GB disk1s4 /dev/disk2 (external, physical): #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *500.1 GB disk2 1: Linux 500.1 GB disk2s1
如果已知是"EXT4"磁盘格式的话,则使用如下命令:
# 只读挂载 $ sudo ext4fuse /dev/disk2s2 ~/Desktop/disk2s2 # 读写挂载 $ sudo ext4fuse /dev/disk2s2 ~/Desktop/disk2s2 -o rw
如果已知是"NTFS"磁盘格式的话,则使用如下命令:
# 先卸载系统的自动挂载 $ sudo diskutil unmount /dev/disk2 # 读写挂载 $ sudo /usr/local/sbin/mount_ntfs /dev/disk2 ~/Desktop/disk2
参考链接
Mac OSX EI Capitan(10.11.5)上使用crosstool-ng 1.22.0 建立树莓派2B的编译环境
背景介绍
树莓派自带的编译工具是基于Linux
的,在Mac OSX
上是无法正常使用的,因此比较简单的方法就是使用crosstool-ng
来建立交叉编译环境。
配置编译环境
1.安装HomeBrew
,方便各种工具的安装
2.使用HomeBrew
安装crosstool-ng
$ sudo brew install crosstool-ng
3.链接Mac OSX
上的install
到ginstall
。Mac OSX
上没有ginstall
$ sudo ln -s /usr/local/bin/ginstall /usr/bin/install
如果不执行命令,则会报错
/Volumes/RPi-EABI/.build/tools/bin/install: line 2: exec: ginstall: not found
4.使用HomeBrew
安装expat
$ sudo brew install expat
不执行此命令,我的电脑会出现crosstool-ng
在配置expat
的时候失败,但是两者使用的版本并不相同,另外貌似出错后,重试即可,不需要安装expat
,但是稳妥起见,还是安装好了。
5.创建大小写区分的磁盘分区文件,并挂载(如果你系统创建的时候,系统分区以及区分大小写,则不必此项操作)
参考Mac OSX下执行crosstool-ng提示“Your file system ‘xxxx’ is *not* case-sensitive!”
6.在刚刚创建并挂载的大小写区分的磁盘上执行配置命令
$ ct-ng armv7-rpi2-linux-gnueabihf
7.修改刚刚命令生成在当前目录下的配置文件
$ sudo vim .config
找到
CT_WANTS_STATIC_LINK=y CT_CC_GCC_STATIC_LIBSTDCXX=y
禁止使用静态链接(Mac OSX
下,无法提供对于libc
的静态链接,只能动态链接)
CT_WANTS_STATIC_LINK=n # set disabled CT_CC_GCC_STATIC_LIBSTDCXX=n # set disabled or comment out
8.执行构建命令
$ ct-ng build
构建中遇到的问题
如果构建出错,可以使用
$ ct-ng build.1
后面的数字代表几个并行的任务,单个任务可以更方便的查看出错的信息,多任务并发会导致日志打印的非常混乱。
在构建(ct-ng build
)的时候遇到任何问题,都应该查看当前构建目录下的build.log
文件,这个文件中详细记录了构建的过程信息,详细的出错信息等。
由于crosstool-ng
在构建过程中需要去服务器上下载源代码,难免出现文件下载不完整的情况,这种情况下,可以从build.log
文件中看到如下的内容:
[FILE ] tar: Retrying... [FILE ] tar: Damaged tar archive [FILE ] tar: Retrying... [FILE ] tar: Damaged tar archive [FILE ] tar: Retrying... [FILE ] tar: Damaged tar archive [FILE ] tar: Retrying... [FILE ] tar: Truncated tar archive [FILE ] tar: Error exit delayed from previous errors.
则说明下载的源代码出现了问题。最容易出现这个问题的是gcc
.以gcc-5.2.0
为例子,修正的方法如下:
$ cd .build $ cd tarballs $ rm -rf gcc-5.2.0.tar.bz2 $ cd .. $ cd src $ rm -rf .gcc-5.2.0.extracting $ rm -rf gcc-5.2.0
简单解释一下代码,tarballs
存储了从服务器上下载的全部源代码的压缩包,解压缩出现问题,因此必须删除,让crosstool-ng
去重新下载,扩展名为.extracting
文件为crosstool-ng
的标记文件,用来标识这个包是不是已经被解压缩过,一旦这个文件存在crosstool-ng
就认为对应的工具已经就绪了,就不会处理这个工具了,最后删除的是工具源代码的目录。
如果提示安装binutils
的时候失败,如下所示:
[INFO ] Installing binutils for host [ERROR] /Volumes/raspberry/rpi-linux/.build/src/binutils-2.25.1/gold/gold-threads.cc:288:13: error: expected expression [ERROR] make[5]: *** [gold-threads.o] Error 1 [ERROR] make[4]: *** [all-recursive] Error 1 [ERROR] make[3]: *** [all] Error 2 [ERROR] make[2]: *** [all-gold] Error 2 [ERROR] make[1]: *** [all] Error 2 [ERROR] [ERROR] >> [ERROR] >> Build failed in step 'Installing binutils for host' [ERROR] >> called in step '(top-level)' [ERROR] >> [ERROR] >> Error happened in: CT_DoExecLog[scripts/functions@216] [ERROR] >> called from: do_binutils_backend[scripts/build/binutils/binutils.sh@240] [ERROR] >> called from: do_binutils_for_host[scripts/build/binutils/binutils.sh@105] [ERROR] >> called from: main[scripts/crosstool-NG.sh@646] [ERROR] >> [ERROR] >> For more info on this error, look at the file: 'build.log' [ERROR] >> There is a list of known issues, some with workarounds, in: [ERROR] >> '/usr/local/Cellar/crosstool-ng/1.22.0/share/doc/crosstool-ng/crosstool-ng-1.22.0/B - Known issues.txt' [ERROR] [ERROR] (elapsed: 36:53.00) [36:54] / make: *** [build] Error 1
查看build.log
可以看到如下的内容:
[ERROR] /Volumes/raspberry/rpi-linux/.build/src/binutils-2.25.1/gold/gold-threads.cc:288:13: error: expected expression [ALL ] : once_(PTHREAD_ONCE_INIT) [ALL ] ^ [ALL ] /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/pthread.h:203:27: note: expanded from macro 'PTHREAD_ONCE_INIT' [ALL ] #define PTHREAD_ONCE_INIT {_PTHREAD_ONCE_SIG_init, {0}} [ALL ] ^ [ALL ] 1 error generated. [ERROR] make[5]: *** [gold-threads.o] Error 1 [ALL ] make[5]: *** Waiting for unfinished jobs....
这个BUG的原因是由于GCC
的版本问题导致的,低于4.7版本的GCC
无法理解这个语法,尽管Mac Osx
已经使用最新的LLVM
,但是遗憾的是,最新的LLVM
并没有支持这个语法。解决方法如下:
$ vim /Volumes/raspberry/rpi-linux/.build/src/binutils-2.25.1/gold/gold-threads.cc
找到如下代码
// Class Once_initialize. This exists to hold a pthread_once_t // structure for Once. class Once_initialize { public: Once_initialize() : once_(PTHREAD_ONCE_INIT) { } // Return a pointer to the pthread_once_t variable. pthread_once_t* once_control() { return &this->once_; } private: pthread_once_t once_; };
修改为:
// Class Once_initialize. This exists to hold a pthread_once_t // structure for Once. class Once_initialize { public: Once_initialize() {once_.__sig = _PTHREAD_ONCE_SIG_init; once_.__opaque[0] = 0;} // Return a pointer to the pthread_once_t variable. pthread_once_t* once_control() { return &this->once_; } private: pthread_once_t once_; };
如果出现了"fatal error: bracket nesting level exceeded maximum of 256
",如下所示:
[ERROR] /Volumes/raspberry/rpi-linux/.build/src/gcc-5.2.0/gcc/config/arm/neon.md:3463:10917: fatal error: bracket nesting level exceeded maximum of 256 [ALL ] /Volumes/raspberry/rpi-linux/.build/src/gcc-5.2.0/gcc/config/arm/neon.md:3463:10917: note: use -fbracket-depth=N to increase maximum nesting level [ALL ] 47 warnings and 1 error generated. [ERROR] make[2]: *** [insn-attrtab.o] Error 1 [ALL ] make[2]: *** Waiting for unfinished jobs.... [ALL ] 42 warnings generated. [ALL ] 18 warnings generated. [ALL ] rm gcc.pod [ERROR] make[1]: *** [all-gcc] Error 2
则修改方法如下:
$ ct-ng menuconfig
在出现的界面中选择"Paths and misc options
"项目
在第二级界面中不断下拉,找到"Extra host compiler flags
",增加"-fbracket-depth=512
",这个选项。
然后重新执行
$ ct-ng build
如果出现错误:
[ALL ] /var/folders/h8/_f6dzm814rn1pjrgxgfvcn900000gn/T//ccU8Jut6.s: Assembler messages: [ALL ] /var/folders/h8/_f6dzm814rn1pjrgxgfvcn900000gn/T//ccU8Jut6.s:81: Error: invalid constant (af) after fixup [ALL ] /var/folders/h8/_f6dzm814rn1pjrgxgfvcn900000gn/T//ccU8Jut6.s:163: Error: invalid constant (ff) after fixup [ERROR] make[3]: *** [/Volumes/raspberry/rpi-linux/.build/armv7-rpi2-linux-gnueabihf/build/build-libc-startfiles/csu/libc-start.o] Error 1
这个是由于LLVM
目前的版本还无法正确的理解部分GCC
的汇编部分的写法,导致编译失败,而这部分的语法一般都是用在优化的时候出现错误,因此我们需要禁用这部分的优化,使用"Paths and misc options
"->"Extra host compiler flags
"增加 "-fno-unroll-loops
"。如下图:
如果出现如下错误:
[ERROR] make[3]: *** [iconvdata/others] Error 2 [ERROR] make[2]: *** [all] Error 2
[ALL ] make[4]: *** No rule to make target `/Volumes/raspberry/rpi-linux/.build/armv7-rpi2-linux-gnueabihf/build/build-libc-final/iconvdata/MIK.so', needed by `others'. Stop. [ERROR] make[3]: *** [iconvdata/others] Error 2 [ERROR] make[2]: *** [all] Error 2 [ERROR] [ERROR] >> [ERROR] >> Build failed in step 'Installing C library' [ERROR] >> called in step '(top-level)'
这个问题是由于编译的时候,同时打开的文件数量超过了256
导致的,修复方式为在shell
中增大同时打开的文件数量限制到1024
:
$ ulimit -n 1024
然后在同一个shell
中继续执行
$ ct-ng build
如果出现如下错误,则直接忽略即可:
[INFO ] Installing final gcc compiler [ERROR] clang: error: unsupported option '-print-multi-os-directory' [ERROR] clang: error: no input files
至于其他问题,貌似重试一下就可以解决了。
编译树莓派源代码
Ubuntu 16.04 (x64)树莓派B+(Raspberry Pi B+)源代码编译
参考链接
- crosstool-NG on OS X
- [DEBUG] ./.build/tools/bin/install: line 2: exec: ginstall: not found
- Building a toolchain
- fatal error: bracket nesting level exceeded maximum of 256
- [Bug binutils/19311] arm-linux-as build on Mac OS X with Xcode7 fails to
- crosstool-ng的配置参数详解
- Raspberry Pi -- Cross Compiling on Mac OSX
- Cross-compilation in OS X under Linux us crosstool-ng
- mac build woes : homebrew+iconvdata=big trouble
Mac OSX下执行crosstool-ng提示“Your file system ‘xxxx’ is *not* case-sensitive!”
在Mac
下面使用HomeBrew
安装了crosstool-ng
来编译树莓派的代码,结果在执行的时候报告如下错误:
$ ct-ng build [INFO ] Performing some trivial sanity checks [ERROR] Your file system in '/Users/Documents/rpi/rpi-linux/.build' is *not* case-sensitive! [ERROR] [ERROR] >> [ERROR] >> Build failed in step '(top-level)' [ERROR] >> [ERROR] >> Error happened in: CT_Abort[scripts/functions@329] [ERROR] >> called from: CT_TestAndAbort[scripts/functions@351] [ERROR] >> called from: main[scripts/crosstool-NG.sh@93] [ERROR] >> [ERROR] >> For more info on this error, look at the file: 'build.log' [ERROR] >> There is a list of known issues, some with workarounds, in: [ERROR] >> '/usr/local/Cellar/crosstool-ng/1.22.0/share/doc/crosstool-ng/crosstool-ng-1.22.0/B - Known issues.txt' [ERROR] [ERROR] (elapsed: 24422614:07.00) [00:01] / make: *** [build] Error 1
比较简单的解决方法就是创建一个支持大小写区分的文件,作为一个分区挂载,然后把代码拷贝到这个分区中执行编译。
1.创建分区文件
$ hdiutil create -volname "Raspberry" -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 20g raspberry.dmg
2.挂载分区
早期版本的Mac OS X
$ hdiutil attach raspberry.dmg -mountpoint /Volumes/raspberry # 切换到挂载目录 $ cd /Volumes/raspberry/
对于OS X EI Capitan(10.11.5)
版本而言,生成的文件名变成了raspberry.dmg.sparseimage
因此需要使用这个文件来挂载
$ hdiutil attach raspberry.dmg.sparseimage -mountpoint /Volumes/raspberry # 切换到挂载目录 $ cd /Volumes/raspberry/
挂载后会在桌面生成一个名为Raspberry
的磁盘文件夹生成,直接操作这个目录即可。
3.修改crosstool-ng
的编译工具下载目录
$ ct-ng menuconfig
如下图的方式进行操作:
1.选择"Paths and misc options
",并选中"Select
"之后点击回车按键
2.点击向下的方向按键,,找到"(${Home}/src) Local tarballs directory
",这个项,并选中"Select
"之后点击回车按键,修改为"/Volumes/raspberry/src
",然后继续向下,找到"(${Home}/x-tools/${CT_TARGET}) Prefix directory
",这个项,并选中"Select
"之后点击回车按键,修改为"/Volumes/raspberry/x-tools/${CT_TARGET}
"
修改后的结果如下图:
完成操作后,不断快速按下Esc
按键,在最后弹出的确认保存窗口中选择保存即可,如下图:
4.卸载分区
$ hdiutil detach /Volumes/raspberry