前幾天,在專案中需要動態鏈結node,需要把node編譯成動態庫,node本身並不支援動態庫的編譯,在網上查詢了下這方面的資料也比較少,所以在這裡將編譯方式記錄下來,方便以後檢視,也希望幫助到有同樣需求的同學。
之所以要修改這裡,是因為要增加乙個編譯引數,在函式configure_node的最後增加一行o['cflags'] += ['-fpic'],pic使.so檔案的**段變為真正意義上的共享。
如果不加-fpic,則載入.so檔案的**段時,**段引用的資料物件需要重定位,重定位會修改**段的內容,這就造成每個使用這個.so檔案**段的程序在核心裡都會生成這個.so檔案**段的copy。每個copy都不一樣,它取決於這個.so檔案**段和資料段在記憶體對映的位置。如果不加引數,編譯出來的so在被載入時會根據載入到的位置再次重定位。如果被多個其他程式使用了的話,那必須在這些載入了so的程式中都要各自維護乙份so的**,也就失去了共享的意義了。
如何編譯為靜態庫或動態庫
要將專案編譯為庫,使用cmake的add library命令 add library static shared module exclude from all source1 source2 sourcen 其中,引數static,shared,module指定生成庫是靜態庫 動態庫或module...
編譯靜態庫編譯動態庫
編譯靜態庫 cr標誌告訴ar將object檔案封裝 archive 我們可以使用nm s 命令來檢視.a檔案的內容 ar cr libmyhello.a hello.o 或 cvr 編譯動態庫 gcc c fpic test1.c gcc c fpic test2.c fpic告訴gcc將源 編譯成...
Linux如何查詢動態庫 編譯 執行
1 gcc編譯 鏈結命令中的 l選項 2 gcc的環境變數的library path 多個路徑用冒號分割 3 gcc預設動態庫目錄 lib usr lib usr lib64 usr local lib。1 編譯目標 時指定的動態庫搜尋路徑 用選項 wl,rpath和include指定的動態庫的搜尋...