Linux学习31_Linux下./configure,make,make install的作用

本文介绍了使用GNU Autoconf和Automake进行程序安装的标准步骤。详细解释了configure、make和makeinstall命令的作用,以及如何通过参数控制安装过程。

这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。

./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。
make是用来编译的,它从Makefile中读取指令,然后编译。
make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

AUTOMAKE和AUTOCONF是非常有用的用来发布C程序的东西。

-----
1、configure,这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如代码:./configure –prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。同时一些软件的配置文件你可以通过指定 –sys-config= 参数进行设定。有一些软件还可以加上 –with、–enable、–without、–disable 等等参数对编译加以控制,你可以通过允许 ./configure –help 察看详细的说明帮助。

2、make,这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。

3、make insatll,这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。

-----
Linux的用户可能知道,在Linux下安装一个应用程序时,一般先运行脚本configure,然后用make来编译源程序,在运行make install,最后运行make clean删除一些临时文件。使用上述三个自动工具,就可以生成configure脚本。运行configure脚本,就可以生成Makefile文件,然后就可以运行make、make install和make clean。

configure是一个shell脚本,它可以自动设定源程序以符合各种不同平台上Unix系统的特性,并且根据系统叁数及环境产生合适的Makefile文件或是C的头文件(header file),让源程序可以很方便地在这些不同的平台上被编译连接。

这时,就可运行configure脚本了,运行configure脚本,就可产生出符合GNU规范的Makefile文件了:
$ ./configure

到此时,就可以运行make进行编译,在运行make install进行安装了,最后运行make clean删除临时文件。
$ make
$ make install           (注:运行这个要有足够的权限)
$ make clean

利用configure所产生的Makefile文件有几个预设的目标可供使用,其中几个重要的简述如下:

make all:产生我们设定的目标,即此范例中的可执行文件。只打make也可以,此时会开始编译原始码,然后连结,并且产生可执行文件。

make clean:清除编译产生的可执行文件及目标文件(object file,*.o)。

make distclean:除了清除可执行文件和目标文件外,把configure所产生的Makefile也清除掉。

make install:将程序安装至系统中。如果原始码编译无误,且执行结果正确,便可以把程序安装至系统预设的可执行文件存放路径。如果用bin_PROGRAMS宏的话,程序会被安装至/usr/local/bin这个目录。

make dist:将程序和相关的档案包装成一个压缩文件以供发布。执行完在目录下会产生一个以PACKAGE-VERSION.tar.gz为名称的文件。 PACKAGE和VERSION这两个变数是根据configure.in文件中AM_INIT_AUTOMAKE(PACKAGE,VERSION)的定义。在此范例中会产生test-1.0.tar.gz的档案。

make distcheck:和make dist类似,但是加入检查包装后的压缩文件是否正常。这个目标除了把程序和相关文件包装成tar.gz文件外,还会自动把这个压缩文件解开,执行 configure,并且进行make all 的动作,确认编译无误后,会显示这个tar.gz文件可供发布了。这个检查非常有用,检查过关的包,基本上可以给任何一个具备GNU开发环境-的人去重新编译。

make[1]: Entering directory '/home/ubuntu/EPICS/support/StreamDevice/configure' perl -CSD /home/ubuntu/EPICS/base-7.0.9/bin/linux-x86_64/makeMakefile.pl O.linux-x86_64 ../.. mkdir -p O.Common make -C O.linux-x86_64 -f ../Makefile TOP=../.. \ T_A=linux-x86_64 install make[2]: Entering directory '/home/ubuntu/EPICS/support/StreamDevice/configure/O.linux-x86_64' perl -CSD /home/ubuntu/EPICS/base-7.0.9/bin/linux-x86_64/convertRelease.pl checkRelease make[2]: Leaving directory '/home/ubuntu/EPICS/support/StreamDevice/configure/O.linux-x86_64' make[1]: Leaving directory '/home/ubuntu/EPICS/support/StreamDevice/configure' make -C ./src install make[1]: Entering directory '/home/ubuntu/EPICS/support/StreamDevice/src' perl -CSD /home/ubuntu/EPICS/base-7.0.9/bin/linux-x86_64/makeMakefile.pl O.linux-x86_64 ../.. mkdir -p O.Common make -C O.linux-x86_64 -f ../Makefile TOP=../.. \ T_A=linux-x86_64 install make[2]: Entering directory '/home/ubuntu/EPICS/support/StreamDevice/src/O.linux-x86_64' Creating ../O.Common/StreamVersion.h perl -CSD ../makeStreamVersion.pl ../O.Common/StreamVersion.h /usr/bin/g++ -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_X86_64_ -DUNIX -Dlinux -DUSE_TYPED_RSET -DSTREAM_INTERNAL -O3 -g -Wall -mtune=generic -m64 -fPIC -I. -I../O.Common -I. -I. -I.. -I../../include/compiler/gcc -I../../include/os/Linux -I../../include -I/home/ubuntu/EPICS/support/asyn/include -I/home/ubuntu/EPICS/base-7.0.9/include/compiler/gcc -I/home/ubuntu/EPICS/base-7.0.9/include/os/Linux -I/home/ubuntu/EPICS/base-7.0.9/include -MM -MF StreamEpics.d ../StreamEpics.cc /usr/bin/g++ -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_X86_64_ -DUNIX -Dlinux -DUSE_TYPED_RSET -DSTREAM_INTERNAL -O3 -g -Wall -mtune=generic -m64 -fPIC -I. -I../O.Common -I. -I. -I.. -I../../include/compiler/gcc -I../../include/os/Linux -I../../include -I/home/ubuntu/EPICS/support/asyn/include -I/home/ubuntu/EPICS/base-7.0.9/include/compiler/gcc -I/home/ubunt
最新发布
03-18
<think>好的,我现在需要解决用户关于EPICS StreamDevice在base-7.0.9、Linux-x86_64环境下使用g++编译时出现的错误的问题。首先,我得回忆一下常见的编译问题可能出在哪里。用户提到他们是在Debian 12下编译,并且已经安装了相关依赖,比如libx11-dev、libxext-dev等,这可能已经解决了一些基础依赖的问题,但可能还有其他依赖项缺失。 接下来,我应该考虑编译错误的具体信息。由于用户没有提供具体的错误信息,我需要引导他们提供更多细节,比如错误日志中的具体错误消息。不过,作为初步分析,常见的编译错误可能包括头文件缺失、库文件找不到、权限问题、编译器版本不兼容等。 首先,检查是否安装了StreamDevice所需的所有依赖。虽然用户已经安装了一些库,但可能缺少与StreamDevice相关的其他库,例如libreadline-dev或者libpcre3-dev。例如,StreamDevice可能依赖这些库来进行正则表达式处理或命令行解析。如果这些库未安装,编译时可能会出现链接错误或头文件找不到的问题。 其次,考虑EPICS Base的版本是否与StreamDevice兼容。用户使用的是base-7.0.9,而StreamDevice可能有特定的版本要求。需要确认StreamDevice的版本是否支持EPICS 7.x。例如,某些较旧的StreamDevice版本可能需要EPICS Base 3.x或5.x,而如果用户使用的是较新的StreamICS Base,可能需要适配或更新StreamDevice的版本。 接下来是权限问题。用户提到使用su权限运行安装命令,但在编译过程中是否有足够的权限写入目标目录?可能需要检查目录权限,尤其是如果EPICS安装在系统目录下,可能需要使用sudo来执行编译命令,或者更改目录的所有权。 编译器版本也是一个关键因素。Debian 12默认的g++版本可能较高,而EPICS或StreamDevice可能对编译器版本有特定要求。例如,某些旧的代码可能不支持C++11或更高标准,或者存在语法不兼容的情况。用户需要确认他们的g++版本是否与StreamDevice兼容,并查看是否需要添加特定的编译选项,比如-std=c++11或更高的标准。 另外,检查环境变量是否正确设置。EPICS编译通常需要正确设置EPICS_BASE、EPICS_HOST_ARCH等环境变量。例如,在Linux-x86_64架构下,EPICS_HOST_ARCH应设置为linux-x86_64,并且EPICS_BASE指向正确的安装路径。如果这些变量设置不正确,编译过程可能会找不到必要的头文件或库文件。 还有可能的问题是Makefile配置错误。用户需要确保StreamDevice的configure目录中的RELEASE文件正确指向依赖项的路径,比如EPICS_BASE的位置以及其他支持模块的位置。例如,如果StreamDevice依赖asyn模块,需要确认asyn的路径是否正确配置在RELEASE文件中。 最后,考虑查看官方文档或社区支持。EPICS社区通常有邮件列表或论坛,用户可能在那里找到类似的问题和解决方案。此外,检查StreamDevice的官方文档是否有特定的编译说明或已知问题。 总结可能的解决步骤:安装缺失的依赖库,确认EPICS Base版本兼容性,检查环境变量设置,调整编译器选项,验证Makefile配置,并查阅官方资源。如果用户能提供具体的错误信息,可以更精准地定位问题。</think>针对EPICS StreamDevice在Debian 12系统下使用base-7.0.9和g++编译时出现的问题,以下是分步分析和解决方案: --- ### **步骤1:检查依赖库完整性** StreamDevice需要额外依赖`libreadline-dev`和`libpcre3-dev`: ```bash sudo apt install libreadline-dev libpcre3-dev ``` 若已安装仍报错,需验证头文件路径是否包含在编译环境中[^1]。 --- ### **步骤2:确认版本兼容性** - **EPICS Base 7.0.9** 与 **StreamDevice 2.8.x** 及以上版本兼容 - 若使用旧版StreamDevice(如2.7.x),需升级至支持EPICS 7的版本: ```bash git clone --branch 2-8 https://github.com/paulscherrerinstitute/StreamDevice ``` --- ### **步骤3:配置环境变量** 在`StreamDevice/configure`目录中修改`RELEASE`文件: ```makefile EPICS_BASE=/path/to/epics-base ASYN=/path/to/asyn # 若依赖asyn模块 ``` 并通过命令验证架构配置: ```bash echo $EPICS_HOST_ARCH # 应输出linux-x86_64 ``` --- ### **步骤4:处理编译器兼容性问题** 若g++版本过高(如g++12),可能需添加兼容性编译选项。在`StreamDevice`的`Makefile`中增加: ```makefile CXXFLAGS += -std=c++11 ``` --- ### **步骤5:排查权限问题** 编译时若提示写入权限不足: ```bash sudo chown -R $USER /path/to/epics-base ``` --- ### **典型错误示例** 1. **头文件缺失** ```text fatal error: cadef.h: No such file or directory ``` **解决**:检查`EPICS_BASE/include`是否加入编译器搜索路径。 2. **符号未定义** ```text undefined reference to `epicsThreadCreate' ``` **解决**:确认`-L$(EPICS_BASE)/lib/linux-x86_64`被链接。 --- ### **验证编译** 重新执行编译命令并观察输出: ```bash make clean make ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值