在《實踐篇》之后,由於需求不斷修正,所以這篇是針對《實踐篇》的一些完善。(以后內容會不定期增加完善)
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 #鏈接數學靜態庫
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 #數學庫
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"
