CentOS下的Autoconf和AutoMake,完善篇 3

《实践篇》之后,由于需求不断修正,所以这篇是针对《实践篇》的一些完善。(以后内容会不定期增加完善)

1.不想链接到math的动态库,想连接到静态库

①使用命令ldd ./mysqrt可以看到链接到libm.so

②使用命令find / -name libm.a,找出静态库的位置,比如:/usr/lib64/libm.a

(如果找不到的话,有可能是没有安装glibc静态库,使用命令安装yum install glibs-static)

③修改Makefile.am文件

AUTOMAKE_OPTIONS=foreign #设定automake的选项

bin_PROGRAMS=mysqrt #定义要产生应用程序的名称

mysqrt_SOURCES=mysqrt.c #源文件以及头文件

LDADD=/usr/lib64/libm.a #链接数学静态库

④重新走一遍生成文件Makefile.in的步骤以及重新configure/make

⑤再使用命令ldd ./mysqrt,发现已经看不到libm.so了(还能看到libc.so之类其它的动态库)

2.所有库都进行静态链接

以上的第1点已经将数学库静态链接了,但是还存在其它的动态库,将所有库都进行静态链接。

①修改Makefile.am文件

AUTOMAKE_OPTIONS=foreign #设定automake的选项

bin_PROGRAMS=mysqrt #定义要产生应用程序的名称

mysqrt_SOURCES=mysqrt.c #源文件以及文件

LDFLAGS=-static #增加这一行,指定优先进行静态链接

LDADD=-lm #数学库

②重新走一遍生成文件Makefile.in的步骤以及重新configure/make

③使用命令ldd ./mysqrt,发现已经看不到所有的so了

3.指定头文件位置

在Makefile.am文件中增加对头文件位置的引用

INCLUDES= -I./include/EngineCore

4.使用std c++11

在configure.in文件中,最后一行AC_OUTPUT(Makefile)之前增加cxx编译参数

CXXFLAGS="$CXXFLAGS -std=c++11"

(转帖整理)Linux下的Autoconf和AutoMake(理论篇) 1

CentOS下的Autoconf和AutoMake(实践篇) 2