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編譯參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM