linux一般是怎样进行源码安装的?
比如你想安装无损音乐解码包flac就需要以下几步:
从官网或源码网站上下载源码包:
我一般从
http://packages.debian.org
上下载。
搭建编译环境
这里主要是安装一些编译工具,如gcc(g++)、autoconf、automake、build-essential等
~$ sudo apt-get install gcc g++ autoconf automake build-essential
这里,我早就装过了,所以没有什么多余的安装信息。
解压软件包,并进入源码文件夹
~$ tar -xvf flac_1.3.0.orig.tar.xz
~$ cd flac-1.3.0
根据需要选择合适的编译参数
~$ ./configure –help
(1)这里演示禁用ogg的支持,即选用编译参数 –disable-ogg;
(2)同时将flac库装在用户主目录下的inst文件夹下,即设置参数–prefix=$HOME/inst
编译flac源码
(1)检查编译环境能否完成编译,生成Makefile文件
~$ ./configure –prefix=$HOME/inst –disable-ogg
(2)进行编译
~$ ./make -j $(nproc)
这里多核心的cpu可以通过 -j 选项加速编译过程
(3)安装
~$ make install (安装的目录当前用户有读写权限)或
~$ sudo make install(安装的目录当前用户没有读写权限)
安装完毕,将编译好的库和可执行文件添加到搜索路径中
~$ cd $HOME/inst
~$ export PATH=$HOME/inst/bin:$PATH
~$ export LD_LIBRARY_PATH=$HOME/inst/lib:$LD_LIBRARY_PATH
~$ export PKG_CONFIG_PATH=$HOME/lib/pkgconfig:$PKG_CONFIG_PATH
这里,如果是安装到/usr或/usr/local文件夹内,一般是不需要设置这些参数的。
整个编译安装过程中容易出现问题的地方就是5.(1)(生成Makefile)和5.(2)(编译源码)这两个地方。
5.(1)出的问题一般是:
(1)待编译库的依赖库没有安装。这就必须先安装依赖库
(2)环境变量未设置好,即使依赖库安装了也找不见。这必须设置好LD_LIBRARY_PATH、PATH和PKG_CONFIG_PATH这三个环境变量;或者根据./configure –help中所给定的–with-xxx=/path/to/dependent/library来指定依赖的库
5.(2)出的问题一般是:
(1)有些源码文件编译不过。这要么搜贴查找解决方法,要么放弃编译(实在无能为力),因为这些错误有可能是潜在的或者已经出现的bug。。。
(2)链接时某些库链接不上。这需要在生成Makefile之前设置CFLAGS或CXXFLAGS环境变量来实现,一般为:export CFLAGS=”-I/path/to/some/library’s/include/dir -L/path/to/some/library’s/lib/dir -lsomelibrary”。
源码编译中的库依赖是十分令人头痛的,祝你好运。。。
如何在linux中配置opengl?
前提是:1.配置好了Ubuntu下的c++环境,gcc以及g++可用。2.使用eclipse for c+做OpenGL开发 步骤一:在ubuntu终端下运行以下命令,安装opengl所需要的库文件$ sudo apt-get install build-essential$ sudo apt-get install freeglut3-dev 步骤二: 运行一下opengl实例,测试配置的环境是否安装成功在eclipse下新建一个工程文件,假设我们命名为Test,在工程Test里面新建一个C++源代码文件,这里我们把它命名为main.cpp,在main.cpp文件中打入一下代码
linux中header是什么?
完全没看懂楼主要什么。
Linux-headers 是 Linux 的开发头文件,应该位于 /usr/include/linux 里面。不过有的系统习惯放 /usr/src 里面一分(这种情况很少,因为正规的地方是 /lib/modules/<内核版本>/ 的某个目录,印象里是他的 build 里),因为有的软件去这里寻找当前内核的源代码来调用当前源代码的 header 进行编译。
/usr/include 里面的 Linux 内核头文件,是专门编译 libc 用的。不能保证内核模块的编译要求。 真正的 Linux 不可能给这个名字。
/usr/src 里面习惯是放完整的 Linux 源代码。但具体名字,要看系统的定义了,有的叫 linux-sources、kernel-source 什么的。有的可能是改进版的名字。
go build参数?
go build
如果参数为***.go文件或文件列表,则编译为一个个单独的包。
当编译单个main包(文件),则生成可执行文件。
当编译单个或多个包非主包时,只构建编译包,但丢弃生成的对象(.a),仅用作检查包可以构建。
当编译包时,会自动忽略’_test.go’的测试文件。
-o
output 指定编译输出的名称,代替默认的包名。
-i
install 安装作为目标的依赖关系的包(用于增量编译提速)。
以下 build 参数可用在 build, clean, get, install, list, run, test
-a
完全编译,不理会-i产生的.a文件(文件会比不带-a的编译出来要大?)
-n
仅打印输出build需要的命令,不执行build动作(少用)。
-p n
开多少核cpu来并行编译,默认为本机CPU核数(少用)。
-race
同时检测数据竞争状态,只支持 linux/amd64, freebsd/amd64, darwin/amd64 和 windows/amd64.
-msan
启用与内存消毒器的互操作。仅支持linux / amd64,并且只用Clang / LLVM作为主机C编译器(少用)。
-v
打印出被编译的包名(少用).
-work
打印临时工作目录的名称,并在退出时不删除它(少用)。
-x
同时打印输出执行的命令名(-n)(少用).
-asmflags ‘flag list’
传递每个go工具asm调用的参数(少用)
-buildmode mode
编译模式(少用)
‘go help buildmode’
-compiler name
使用的编译器 == runtime.Compiler
(gccgo or gc)(少用).
-gccgoflags ‘arg list’
gccgo 编译/链接器参数(少用)
-gcflags ‘arg list’
垃圾回收参数(少用).
-installsuffix suffix
a suffix to use in the name of the package installation directory,
in order to keep output separate from default builds.
If using the -race flag, the install suffix is automatically set to race
or, if set explicitly, has _race appended to it. Likewise for the -msan
flag. Using a -buildmode option that requires non-default compile flags
has a similar effect.
-ldflags ‘flag list’
‘-s -w’: 压缩编译后的体积
-s: 去掉符号表
-w: 去掉调试信息,不能gdb调试了
-linkshared
链接到以前使用创建的共享库
-buildmode=shared.
-pkgdir dir
从指定位置,而不是通常的位置安装和加载所有软件包。例如,当使用非标准配置构建时,使用-pkgdir将生成的包保留在单独的位置。
-tags ‘tag list’
构建出带tag的版本.
-toolexec ‘cmd args’
a program to use to invoke toolchain programs like vet and asm.
For example, instead of running asm, the go command will run
‘cmd args /path/to/asm <arguments for asm>’.
以上命令,单引号/双引号均可。
对包的操作’go help packages’
对路径的描述’go help gopath’
对 C/C++ 的互操作’go help c’
构建遵守某些约定(‘go help gopath’),但不是所有的项目都遵循这些约定,当使用自己的惯例或使用单独的软件构建系统时可以选择使用较低级别的调用go tool compile和go tool link来避免一些构建工具的开销和设计决策
mozilla/5.0是什么浏览器?
这个并不是火狐浏览器,看UA的话,Mozilla/5.0基本上所有的浏览器的UA都带,后面是机器的系统信息,再往后是内核信息,最后的Mobile Safari才是真正的浏览器使用的UA,也就是使用移动版Safari的特性