2014-01-13 24 views

回答

1

這取決於。如果你想解析來自動態鏈接庫的外部符號,你需要說明鏈接庫的時候,比如-L/path/to/libY -llibY。另外,除非你是LD_LIBRARY_PATH的忠實粉絲,否則你可能想要說-wl,-rpath=/path/to/libY和Goodle RUNPATHRPATH的主題。

+0

我知道,我的意思是,如果我不添加-Land -l,如果在創建libx.so – jiafu

+0

這取決於當連接會失敗。如果你正在用'-Wl,-znow -Wl,-zdefs -Wl, - fatal-warnings'來編譯GCC,那麼編譯將會失敗,除非你鏈接所有需要的庫(這是推薦的方法)。否則它很可能會通過,當您嘗試運行與您的庫鏈接的二進制文件時,您會第一次看到該問題。 – bobah

+0

你的意思是如果我不在gcc中使用-W1,鏈接可能不會失敗? – jiafu

1

據我所知,如果您使用的是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