我想創建一個共享庫libX.so,但是libX.so包含一個對libY.a或libY.so有依賴性的cpp。是否必須將依賴項庫添加到makefile中以在C++中生成共享庫?
那麼,在鏈接時,我必須添加-I -l相關的libY來創建libX.so嗎?
我想創建一個共享庫libX.so,但是libX.so包含一個對libY.a或libY.so有依賴性的cpp。是否必須將依賴項庫添加到makefile中以在C++中生成共享庫?
那麼,在鏈接時,我必須添加-I -l相關的libY來創建libX.so嗎?
這取決於。如果你想解析來自動態鏈接庫的外部符號,你需要說明鏈接庫的時候,比如-L/path/to/libY -llibY
。另外,除非你是LD_LIBRARY_PATH
的忠實粉絲,否則你可能想要說-wl,-rpath=/path/to/libY
和Goodle RUNPATH
與RPATH
的主題。
據我所知,如果您使用的是libY.so
的符號,那麼與libX.so
鏈接的任何人都必須鏈接到libY.so
。
但是,如果立白是一個靜態庫,即:libY.a
你有兩個選擇
選項1:
與一個.so
,你可以用libY.a
鏈接和用戶可能要對鏈接libY.a
。
選項2:
使用libY.a
只是另一個目標文件,鏈接器將解壓libY.so
,併爲你做鏈接。 使用這種方法,沒有人知道你正在使用libY.a
。
g++ $(OBJS) /path/to/libY.a -o libX.so
我知道,我的意思是,如果我不添加-Land -l,如果在創建libx.so – jiafu
這取決於當連接會失敗。如果你正在用'-Wl,-znow -Wl,-zdefs -Wl, - fatal-warnings'來編譯GCC,那麼編譯將會失敗,除非你鏈接所有需要的庫(這是推薦的方法)。否則它很可能會通過,當您嘗試運行與您的庫鏈接的二進制文件時,您會第一次看到該問題。 – bobah
你的意思是如果我不在gcc中使用-W1,鏈接可能不會失敗? – jiafu