天天看點

makefile遇到的一些坑

先記錄下要點吧:

1,c和c++的混合程式設計,是否加extern C,gcc和g++的差別

2,靜态庫和動态庫的生成及連結

3,動态庫連結靜态庫,則靜态庫生成中間程式(如.o時)需增加-fPIC參數

4,-fPIC -shared的真正含義,及該參數放置于-o之前或之後的差別(未查詢到,求大神告知)

封裝成靜态庫.a,不需要加-fPIC 和 -shared參數,動态庫需要。

但是如果封裝成的靜态庫後續要編譯到一個動态庫中去,則封裝成靜态庫時也需要加-fPIC參數

5,nm指令可以查詢庫中是否實作了函數,待查詢具體用法

eg:nm  xxx.a |grep  function_name

如果是.c的檔案封裝的庫,可以查詢出function_name

如果是c++檔案封裝成的庫,查詢到的function_name會有字首和字尾,因為C++有重載,編譯成.c的形式會加上前字尾用來區分

6,某些參數不生效時,先看看程式中是否有同名檔案,如-I不生效

7,不同linux系統編譯出來的庫,不一定相容。如centos環境下安裝的opencv,相關的庫和程式移植到ubuntu環境,可能會編譯不通過,必須在ubuntu下重新安裝opencv才可行。

繼續閱讀