一、前言

本文记录了在新安装的 ubuntu 14.04 系统下安装 caffe 的过程。这里主要参考了两个链接:1) http://caffe.berkeleyvision.org/installation.html2) http://ouxinyu.github.io/Blogs/20140723001.html

很多人不太喜欢看官方教程,但其实 caffe 的官方安装指导做的非常好。我在看到 2) 之前,曾根据官方指导在 OSX 10.9, 10.10,Ubuntu 12.04, 14.04 下安装过 10 多次不同版本的 caffe,都成功了。

本文有不少内容参考了 1)和 2),但又有一些内容与二者不同。例如,2)中对 gcc 进行了降级,而我却对 gcc 进行了升级;与 2)的安装顺序也有些不同。我按照下面的顺序在一台新买的电脑上安装 caffe:

安装 win7/10(略) –> 安装 ubuntu 14.04(略) –> 升级 gcc 4.9 -> 安装 nvidia 显卡驱动 -> 安装 cudacudnn –> 安装 anaconda –> 安装 Opencv 2.4.11 –> 安装 Matlab –> 安装 Caffe

我之所以要在装完系统的第一时间升级 gcc 4.9,是因为 nvidia 的驱动和 cuda 都需要 gcc 进行编译。如果先安装驱动和 cuda,再升级 gcc ,那么有时候会出现问题(我就遇到了)。当然,ubuntu 14.04 自带的 gcc-4.8 已经够用了。但我比较喜欢用最新的稳定版,所以就选择了升级 gcc 4.9

后文将按照上述安装顺序来写。上述安装顺序还需要做一些调整,以后再慢慢改吧。

二、升级 gcc 4.9

如果只用 ubuntu 14.04 自带的 gcc-4.8 则本节可以跳过。

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9
sudo apt-get install g++-4.9

此时,系统默认使用的还是 gcc 4.8。如果想把 gcc 4.9 设为默认,必须要重新做一下软连接

sudo ln -sf /usr/bin/gcc-4.9 /usr/bin/gcc
sudo ln -sf /usr/bin/gcc-ar-4.9 /usr/bin/gcc-ar
sudo ln -sf /usr/bin/gcc-ranlib-4.9 /usr/bin/gcc-ranlib

然后,可以用 gcc -v 来查看 gcc 的版本。

...
Thread model: posix
gcc version 4.9.2 (Ubuntu 4.9.2-0ubuntu1~14.04)

注意: 在编译 matcaffe 接口时,可能会出现警告:

$ make matcaffe -j 8
MEX matlab/+caffe/private/caffe_.cpp
Building with 'g++'.

Warning: You are using gcc version '4.9.2-0ubuntu1~14.04)'. The version of gcc is not supported. The version currently supported with MEX is '4.7.x'. For a list of currently supported compilers see: http://www.mathworks.com/support/compilers/current_release.
MEX completed successfully.

暂且忽略它,后面我会做一些配置。反正我目前在 ubuntu 14.04 OSX 10.10 两个系统里用 gcc-4.9 RCNN 实验没遇到问题。

参考链接:http://askubuntu.com/questions/428198/getting-installing-gcc-g-4-9-on-ubuntu

三、安装 nvidia 显卡驱动

如果电脑没有 nvidia 的显卡,此步跳过。

网上的许多教程都指出要进入 tty,然后把 lightdm 关了。但我发现直接用 apt-get 安装的话,无需关闭 lightdm

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-352 nvidia-settings nvidia-prime

注意:之前的第三方源 xorg-edgers 已经被 ubuntu 和 nvidia 合作的官方源graphics-drivers 代替。现在已经无法通过 xorg-edgers 源来安装新驱动。见链接: [1], [2]

重启电脑。

若要安装其他版本的驱动,则输入:

# 331 driver
sudo apt-get install nvidia-331

# 334 driver
sudo apt-get install nvidia-334

# install the latest version
sudo apt-get install nvidia-current

安装完后,输入 prime-select query 查看当前正在使用的显卡。

$ prime-select query
nvidia

输入 cat /proc/driver/nvidia/version 查看正在使用的 nvidia 驱动版本和编译时采用的 gcc 版本

$ cat /proc/driver/nvidia/version 
NVRM version: NVIDIA UNIX x86_64 Kernel Module  352.30  Tue Jul 21 18:53:45 PDT 2015
GCC version:  gcc version 4.9.2 (Ubuntu 4.9.2-0ubuntu1~14.04)

虽然 cuda 里已经包含了 nvidia 驱动,但是根据 caffe 官方指导,cuda 与显卡驱动最好分开安装。

参考链接:http://ubuntuhandbook.org/index.php/2015/04/install-nvidia-driver-346-59-in-ubuntu-from-ppa/http://www.binarytides.com/install-nvidia-drivers-ubuntu-14-04/http://my.oschina.net/eechen/blog/227134https://devtalk.nvidia.com/default/topic/810964/linux/black-screen-after-prime-select-nvidia-and-log-out-using-v346-35-drivers/2/

四、安装 cuda 7.0

如果电脑没有 nvidia 的显卡,此步跳过。有人说即使电脑上没有 nvidia 显卡也必须装 cuda,否则会出问题。但我亲自实验过,完全可以不装 cuda。但必须在 makefile 文件中把 cpu_ONLY := 1 打开。并且不能使用 cuda 相关函数。如果使用 cuda 相关函数,则会报错。

cuda 官方网站 下载对应的 deb包。然后双击,在软件中心里安装。此时并没有完成安装,deb 包只是告诉系统去哪里下载 cuda 而已。

Why doesn’t the cuda-repo package install the CUDA Toolkit and Drivers?

When using RPM or Deb,the downloaded package is a repository package. Sucha package only informs the package manager where to find the actual installationpackages,but will not install them.

CUDA_Getting_Started_Linux.pdf

接下来输入下列命令安装 cuda:

sudo apt-get update
sudo apt-get install cuda

安装完成后,再配置环境

export PATH=/usr/local/cuda-7.0/bin:$PATH    
export LD_LIBRARY_PATH=/usr/local/cuda-7.0/lib64:$LD_LIBRARY_PATH

另外,我发现上面的 export 操作在我电脑上不起作用。所以我直接把 lib64 里的库文件软连接到了 /usr/local/lib/

PS: 安装 cuda 后,或许之前安装的显卡驱动会被 cuda 里的驱动覆盖掉一部分。此时不妨再次运行显卡驱动安装命令来检查一下是不是有需要重新安装的部分:

sudo apt-get install nvidia-352
nvidia-352 is already the newest version.
The following packages were automatically installed and are no longer required:
  account-plugin-windows-live cuda-command-line-tools-7-0 cuda-core-7-0
  cuda-cublas-7-0 cuda-cublas-dev-7-0 cuda-cudart-7-0 cuda-cudart-dev-7-0
  cuda-cufft-7-0 cuda-cufft-dev-7-0 cuda-curand-7-0 cuda-curand-dev-7-0
  cuda-cusolver-7-0 cuda-cusolver-dev-7-0 cuda-cusparse-7-0
  cuda-cusparse-dev-7-0 cuda-documentation-7-0 cuda-driver-dev-7-0
  cuda-license-7-0 cuda-misc-headers-7-0 cuda-npp-7-0 cuda-npp-dev-7-0
  cuda-nvrtc-7-0 cuda-nvrtc-dev-7-0 cuda-samples-7-0 cuda-toolkit-7-0
  cuda-visual-tools-7-0 freeglut3 freeglut3-dev libepoxy0 libevdev2 libllvm3.5
  libxmu-dev libxmu-headers libxt-dev libxvmc1 nvidia-modprobe
Use 'apt-get autoremove' to remove them.
0 upgraded,0 newly installed,0 to remove and 313 not upgraded.

五、安装 cudnn

如果电脑没有 nvidia 的显卡,此步跳过。从官方网站下载 cudnn 后解压。得到的文件是 .h .so 文件。所以,直接把他们拷贝到 /usr/local/include/usr/local/lib/ 下就好了。

sudo cp cudnn.h /usr/local/include
sudo cp libcudnn.so.6.5.48 /usr/local/lib

sudo ln -s /usr/local/lib/libcudnn.so.6.5.48 /usr/local/lib/libcudnn.so.6.5
sudo ln -s /usr/local/lib/libcudnn.so.6.5 /usr/local/lib/libcudnn.so

sudo ldconfig

注意: 检查一下刚刚拷贝到 /usr/local/lib 下的 libcudnn.so.6.5.48 的文件权限。

$ ls -l *cudnn*

lrwxrwxrwx 1 root root       33  8月  4 22:05 libcudnn.so -> /usr/local/lib/libcudnn.so.6.5.48
lrwxrwxrwx 1 root root       18  8月  4 22:09 libcudnn.so.6.5 -> libcudnn.so.6.5.48
-rw------- 1 root root 11172416  8月  2 23:18 libcudnn.so.6.5.48
-rw------- 1 root root 11623922  8月  2 23:19 libcudnn_static.a

从上面的显示结果可以看到,libcudnn.so.6.5.48 对于 others 用户是没有读取权限的,这会导致编译 caffe时出现下列错误:

AR -o .build_release/lib/libcaffe.a
LD -o .build_release/lib/libcaffe.so
/usr/bin/ld: cannot find -lcudnn
collect2: error: ld returned 1 exit status
make: *** [.build_release/lib/libcaffe.so] Error 1

解决方法很简单,只要赋予 others 可读(写)权限即可:

sudo chmod 755 libcudnn.so.6.5.48

六、安装 anaconda

强烈推荐使用 anaconda python。它里面集成了很多包,ipython, mkl,numpy等都预装了, 省去了很多麻烦。如果有 edu 邮箱的话,还可以获得 anaconda accelerate,在矩阵运算的时候,可以启用并行计算,速度快很多。

安装 anaconda:
./Anaconda-2.3.0-Linux-x86_64.sh

安装 accelerate:
conda update conda
conda install accelerate
conda install iopro

接下来拷贝 anaconda 的许可文件到用户主目录

mv license_academic_20150611072013.txt ~/.continuum

然后升级 ipython,如果不用 ipython,那就跳过下面这一步:

conda update ipython
conda update ipython-notebook
conda update ipython-qtconsole

下面测试一下 anaconda python 的功能,首先在终端下启用 ipython-notebook

$ ipython notebook

然后新建一个 ipynb 文件。在 cell 中输入

In [1]:  import mkl
         mkl.set_num_threads(4) # 设置最大线程数
         mkl.get_max_threads()  # 查看当前线程数

Out[1]:  4

可见 anaconda 已经预装了 MKL。测一下速度:

In [23]: a = np.random.random((4096,4096))
         %timeit np.dot(a,a)

         1 loops,best of 3: 6.44 s per loop

七、安装 Opencv 2.4.11

喜欢 opencv 3.0 的,可以选择安装 opencv 3.0。这里我继续使用 Opencv 2.4.11Opencv 的安装过程较繁琐,且网上已经有了大量的安装教程,推荐三个:http://www.sysads.co.uk/2014/05/install-opencv-2-4-9-ubuntu-14-04-13-10/http://rodrigoberriel.com/2014/10/installing-opencv-3-0-0-on-ubuntu-14-04/http://karytech.blogspot.hu/2012/05/opencv-24-on-ubuntu-1204.html

其中 ffmepg的安装需要注意。如果按照第一个链接里的方法,先卸载再重新安装 ffmepg 的话,在某些机器机器上可以编译通过 opencv,但在另一些机器上就会出错(两种情况我都遇到了。。)。出错的解决方法是自己下载 ffmepg,从源码开始编译。具体参照下面两个帖子:http://stackoverflow.com/questions/28319376/installing-opencv-in-ubuntu-14-10http://stackoverflow.com/questions/26592577/installing-opencv-in-ubuntu-14-10

这里提供一个脚本,方便在 terminal 下编译 Opencv 程序。脚本来自: https://jayrambhia.wordpress.com/2012/05/08/beginning-opencv/

echo "compiling $1"
if [[ $1 == *.c ]]
then
    gcc -g `pkg-config --cflags opencv`  -o `dirname $1`/`basename $1 .c` $1 `pkg-config --libs opencv`;
elif [[ $1 == *.cpp ]]
then
    g++ -g `pkg-config --cflags opencv` -std=c++11 -std=gnu++11 -o `dirname $1`/`basename $1 .cpp` $1 `pkg-config --libs opencv`;
else
    echo "Please compile only .c or .cpp files"
fi
echo "Output file => ${1%.*}"

将上述代码保存为一个 xxx.sh 文件,名字自己起。然后在终端里给该文件开启可执行权限:

sudo chmod 777 xxx.sh

接下来在 .bashrc 中建立一个 alias 来指向 xxx.sh

subl ~/.bashrc

.bashrc 中键入

alias opencv="/path/to/xxx.sh"

以后要编译 opencv 程序的时候,只需要在终端里输入 opencv xxx.cpp 即可。无需敲入繁琐的 pkg-config 前后缀。例如,直接在终端里键入 opencv 命令,会提示

$ opencv

compiling 
Please compile only .c or .cpp files
Output file =>

其他可选教程:https://nusharex.wordpress.com/2015/06/01/18/快捷安装脚本:https://gist.github.com/Coldmooon/c2e146bb7e960556e055

八、安装 Matlab

安装 matlab 的过程这里不赘述,重点说下安装后做的事:提供两种方法实现在 terminal 中启动 matlab:

1) 将 matlab 的可执行程序加入到系统的环境变量中

export PATH="/path/to/matlab:$PATH"

2) 与 opencv 相同,在 .bashrc 中建立一个 matlab alias:

alias matlab='/path/to/matlab'

方法 2) 的优势是,matlab 在启动时可以调用一些指定的库文件。因为,matlab 在启动时,会优先读取自带的 opencv 库,而不读取系统中安装好的 opencv 2.4.11 库。在这种情况下做 RCNN 的实验,就可能报错。

所以我在 Mac OSX 10.10 下,做了如下 alias:

alias rcnn="DYLD_INSERT_LIBRARIES=/usr/local/lib/libopencv_highgui.2.4.dylib:/usr/local/lib/libtiff.5.dylib /Applications/MATLAB_R2014b.app/bin/matlab"

以后要做 Rcnn 实验的时候,只需要在终端里输入 rcnn 就可以启动 matlab 并优先读取自己安装的 opencv 2.4.11 库。

而在 Ubuntu 14.04 里,我先建立了一个 matlab 脚本,用来启动 matlab:

$ vim matlab.sh

键入下面的内容,用户名改成自己的:

export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/home/your_username/MATLAB/R2014b/bin/matlab

然后按 :wq 保存。再赋予可执行权限:

$ sudo chmod 777 matlab.sh

接下来在 .bashrc 中建立一个 alias,指向刚才建立的脚本:

vim ~/.bashrc

增加:
alias matlab="/path/to/matlab.sh"

以后在终端里输入 matlab 即可启动,并预先读取 libstdc++.so.6 这个库,以防止出现 GLIBCXX_3.4.20 相关错误。出错的原因分析太长了,请看上一篇文章的第 12 ,里面有详细记载。

当然,如果在你的电脑上不出错的话,那就不需要这么干了。直接按照本节开头的 1),2) 操作即可。

九、安装 MKL,Openblas or Atlas

– MKL

其实 anaconda 已经自带了 MKL,但不不妨这里再装一下。首先去下面的链接下载学生版 MKLhttps://software.intel.com/en-us/intel-mkl安装过程不说了,基本直接下一步就可以了。接下来配置环境:

sudo vim /etc/ld.so.conf.d/intel_mkl.conf

输入:
/opt/intel/lib/intel64
/opt/intel/mkl/lib/intel64
关闭并保存文件。

sudo ldconfig

– Openblas

去官方网站 下载 OpenBLAS 的安装包,解压。进入安装目录,在终端输入

$ make -j 8

安装成功之后,继续在终端输入

$ make install PREFIX=your_directory

注意,如果这里自己选择安装目录,则在编译 Caffe 的时候,会提示找不到 OpenBLAS的库文件,此时,需要进一步设置 LD_LIBRARY_PATH 才行。

根据具体的安装路径设置:
export LD_LIBRARY_PATH=/opt/OpenBLAS/lib

– Atlas

sudo apt-get install libatlas-base-dev

十、安装 Boost

进入 Boost 的官方网站 http://www.boost.org/ 下载安装包。按照官方指南进行安装。最简单的方法是直接在 ubuntu 的软件仓库里搜索 libboost。也在可以用 apt-get 安装:

sudo apt-get install libboost-all-dev

其实这一步可以放到下一节来做。 ————————————————-

十一、其他依赖库

按照 官方指南 进行:

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

安装过 anaconda 的话,那 libhdf5-serial-dev 可以不装。如果编译时提示找不到 hdf5 的库。就把 anaconda/lib 加到 ld.so.conf 中去。

$ sudo vim /etc/ld.so.conf

添加一行,用户名改为你自己的:
/home/your_username/anaconda/lib
关闭并保存文件。

$ sudo ldconfig

十二、编辑 Caffe makefile 文件:

重点要改的地方,电脑有 nvidia 显卡的配置:

# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1

# cpu-only switch (uncomment to build without GPU support).
# cpu_ONLY := 1

# To customize your choice of compiler,uncomment and set the following.
# N.B. the default for Linux is g++ and the default for OSX is clang++
# CUSTOM_CXX := g++

# CUDA directory contains bin/ and lib/ directories that we need.
CUDA_DIR := /usr/local/cuda
# On Ubuntu 14.04,if cuda tools are installed via
# "sudo apt-get install nvidia-cuda-toolkit" then use this instead:
# CUDA_DIR := /usr

# CUDA architecture setting: going with all of them.
# For CUDA < 6.0,comment the *_50 lines for compatibility.
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
                -gencode arch=compute_20,code=sm_21 \
                -gencode arch=compute_30,code=sm_30 \
                -gencode arch=compute_35,code=sm_35 \
                -gencode arch=compute_50,code=sm_50 \
                -gencode arch=compute_50,code=compute_50

# BLAS choice:
# atlas for ATLAS (default)
# mkl for MKL
# open for OpenBlas
BLAS := mkl
# Custom (MKL/ATLAS/OpenBLAS) include and lib directories.
# Leave commented to accept the defaults for your choice of BLAS
# (which should work)!
# BLAS_INCLUDE := /path/to/your/blas
# BLAS_LIB := /path/to/your/blas

# MATLAB directory should contain the mex binary in /bin.
MATLAB_DIR := /home/your_username/MATLAB/R2014b
# MATLAB_DIR := /Applications/MATLAB_R2012b.app

# PYTHON_INCLUDE := /usr/include/python2.7 \
#               /usr/lib/python2.7/dist-packages/numpy/core/include
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location,sometimes it's in root.
ANACONDA_HOME := $(HOME)/anaconda
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
                $(ANACONDA_HOME)/include/python2.7 \
                $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \

# We need to be able to find libpythonX.X.so or .dylib.
# PYTHON_LIB := /usr/lib
PYTHON_LIB := $(ANACONDA_HOME)/lib

# Uncomment to support layers written in Python (will link against Python libs)
# WITH_PYTHON_LAYER := 1

电脑没有 nvidia 显卡的配置:

# cuDNN acceleration switch (uncomment to build with cuDNN).
# USE_CUDNN := 1

# cpu-only switch (uncomment to build without GPU support).
cpu_ONLY := 1

# To customize your choice of compiler,uncomment and set the following.
# N.B. the default for Linux is g++ and the default for OSX is clang++
# CUSTOM_CXX := g++

# CUDA directory contains bin/ and lib/ directories that we need.
# CUDA_DIR := /usr/local/cuda
# On Ubuntu 14.04,comment the *_50 lines for compatibility.
# CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
#                 -gencode arch=compute_20,code=sm_21 \
#                 -gencode arch=compute_30,code=sm_30 \
#                 -gencode arch=compute_35,code=sm_35 \
#                 -gencode arch=compute_50,code=sm_50 \
#                 -gencode arch=compute_50,code=compute_50

...

其余部分保持不变

接下来编译。

十三、编译

在终端下输入:

$ make all -j 8
$ make test -j 8
$ make runtest -j 8

接下来编译 python 接口和 matlab 接口:

$ make pycaffe -j 8
$ make matcaffe -j 8

在编译过程中如果遇到错误,可以在上一篇文章里搜索一下。

十四、散热系统(建议不要跳过本节内容)

无论是做计算,还是玩游戏,散热都是极其重要的。cpu 或 GPU 的温度一旦达到了设定的阈值,它们就开始自动降频。于是 i7 变赛扬,Titan X 变集显。。所以,如果不好好处理,散热系统很容易成为整个电脑性能的瓶颈。

现在主流的散热方式是风冷和水冷。水冷的效果好,静音,但是成本高,需要一定的动手能力。风冷要便宜一些,但是噪音大,并且需要高档点的机箱来构造风道。大部分人使用的还是风冷。所以接下来重点讲一下 Nvidia GPU 的风冷。

– GPU 的风冷:大家用的一般都是 nvidia 的游戏卡,例如 Titan X。这类显卡主要为游戏优化,其 BIOS 的温度阈值设定并不适合深度学习。所以,我们必须自己控制风扇速度。在 windows 下控制温度阈值很简单,一般正规的厂商,如华硕、技嘉、微星,都会配送显卡超频软件,可以自己 “画” 温控曲线。而在 Ubuntu 14.04 下控制风扇转速就要稍微麻烦些:

Ubuntu 14.04 下控制显卡风扇转速有两种方法: 1. 刷修改版的 BIOS,改变温度阈值; 2. 将 xorg.conf 文件的 coolbits 字段打开。

介绍第二种方法:

首先打开 coolbits 字段。装好 nvidia 显卡驱动后,在终端下输入:

$ sudo nvidia-xconfig

这时,会在 /etc/X11/ 下自动生成 xorg.conf 文件。我们要做的就是在 xorg.conf 文件里,给 coolbits 字段设定一个值。于是,在终端下输入:

$ cd /etc/X11
$ sudo nvidia-xconfig --cool-bits=28

重启电脑。然后在终端下输入:

$ nvidia-settings

这时会开启显卡控制界面,在 Thermal Settings 选项卡中,可以通过滑块来控制风扇的转速。令 coolbits=28 的原因是:

4(开启 GPU 风扇控制功能)
+
8(启用调节时钟频率功能,也就是允许超频)
+
16(`nvidia-settings` 的命令行接口可以给 GPU 增加电压) 
= 
28(超频太猛的话,可能会烧坏你的显卡)...

除了在显卡控制界面里修改风扇转速外,还可以使用命令行控制,这在用 SSH 远程登录时非常有用:

查询显卡当前状态
nvidia-smi

仅仅读取 GPU 温度:
nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader

查询与 GPU 风扇相关的关键字,例如风扇的转速等
nvidia-settings -q all | grep Fan

设定风扇转速
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=70"

– cpu 的风冷Haswell 架构的 cpu 能耗做的不是很好,普遍发热都很严重。如果用 i7 4790k 做计算的话,一般的散热器都压不住温度。不用水冷的话,可以选大霜塔或猫头鹰等散热器。次一点的可以选玄冰400。整个机箱风道的构造是,机箱前进风,后、上出风:

机箱风道:
-----------
| ⬅️ ⬆️    |
| ️      ⬅️ |
|----------

ubuntu 14.04 从零开始安装caffe的更多相关文章

  1. css绝对定位如何在不同分辨率下的电脑正常显示定位位置?(一定要看!)

    这篇文章主要介绍了css绝对定位如何在不同分辨率下的电脑正常显示定位位置,本文首先解释了常见的电脑分辨率,为了页面在不同的分辨率下正常显示,要给页面一个安全宽度,再去使用绝对定位,具体操作步骤大家可查看下文的详细讲解,感兴趣的小伙伴们可以参考一下。

  2. ios中的.dylib和.a lib有什么区别?

    我知道Objectivec中的编译和运行时是什么,但是我想知道是什么画了这两个库之间的界限?他们的目的是什么,除了陈述一个是静态的而另一个是动态的?我们何时需要一个而不是另一个?

  3. ios – Xcode项目在文档大纲中显示为灰色

    我一直在使用iCloud来“同步”我正在从我的笔记本电脑到桌面的Xcode项目.不幸的是,它似乎没有那么好用.我今天在台式机上打开了一个项目,我昨天在笔记本电脑上工作.如果我在桌面上打开文件,则会丢失故事板中的某些按钮和标签.看看文档,我可以看到这些,但它们是灰色的(见图).但是,当我构建文件时,它们在模拟器中显示为正常.知道为什么或如何让它们正常出现?

  4. xamarin.ios – ShareKit与MonoTouch如何?

    有人可以验证ShareKit实际上是否可用于MonoTouch并指导我完成使其工作所需的步骤?解决方法您首先从getsharekit.com下载还是使用ShareKit2.0?

  5. ios – Xcode 9.2模拟器调试中断;无法附加到进程ID

    iOS模拟器上的Xcode9.2调试对我来说已经彻底破坏了.我花了几个小时研究这个问题并尝试了大量的建议,但没有完全擦除我的硬盘并开始安装新的操作系统.我最终向Apple提交了一个错误.如果有人遇到此问题并有任何建议,请在此处发布.摘要:尝试使用调试可执行文件在调试模式下构建和运行时.模拟器只将应用程序打开到白色屏幕,然后Xcode弹出错误:重现步骤:制作任何项目并尝试在任何模拟器上运行.预期成绩

  6. 在Xcode服务器中找不到代码签名标识

    使用Xcode7B4和Server5B4与Carthage项目.要构建项目,我需要首先构建它的依赖项.所以我使用以下代码向bot添加了BeforeIntegration步骤:自己运行一切都有效.但是当机器人运行时,我得到了这个:CodeSignerror:Nocodesigningidentitiesfound:Novalidsigningidentities(i.e.certificateand

  7. 可可 – NSTimer中的代码可防止自动睡眠

    我在我的应用程序中运行了一个NSTimer,它收集一些数据并定期发送到服务器.在生产中,计时器将每隔几个小时发射一次.我担心干扰自动睡眠.在测试中,计时器和睡眠时间的某些组合完全阻止自动睡眠–显示器休眠,系统保持运行.将我的NSTimer设置为一分钟始终会停止它.一些Mac应用程序因运行时干扰自动睡眠而臭名昭着.什么操作会阻止系统进入睡眠状态?

  8. ios – iPhone崩溃日志不能正确地符号化并且是双重间隔的

    任何建议超过欢迎.谢谢.解决方法当这件事发生在我身上时,它只是我通过电子邮件收到的日志.如果我记得,至少有一些是在.msg文件中,我不得不把它们拿出来.它可能是Exchange编码更改.如果你显示不可见的字符,你可能会看到每个字符之间的东西.您可以找到并替换它们以删除它们或更改编辑器中的编码.

  9. xcode – 今天OS X上的Widget无法正常工作

    解决方法好的终于找到了问题.我手工编写了我的应用程序,因为我有一个应用程序依赖的复杂框架,需要使用copy/Runscript后构建脚本手工复制它们.无论如何,它似乎至少从Xcode7开始,这不再像预期的那样工作.应用程序的工作原理和协同设计说应用程序已经正确签名,但很明显,幕后发生的事情正在打破代码签名.我最终删除了所有手动代码签名的东西,只需使用Xcode的“复制框架”构建后步骤并选中“登录复制”.它现在终于按预期工作了.

  10. 反应原生 – 如何通过Xcode构建React Native iOS应用程序到设备?

    我试图将AwesomeProject应用程序构建到设备上.构建成功并启动屏幕显示,但后来我看到一个红色的“无法连接到开发服务器”屏幕.它表示“确保节点服务器正在运行–从Reactroot运行”npmstart“.看起来节点服务器已经运行,因为当我做npm启动时,我收到一个EADDRINUSE消息,表示该端口已经在使用.解决方法从设备访问开发服务器您可以使用开发服务器快速迭代设备.要做到这一点,你的

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部