我正在一個非常大的C++項目中創建一個大的共享對象,我們在這裏使用一個外部SDK,其中有幾個頭文件和幾個共享庫,它們都屬於對方。這意味着SDK類的聲明在頭文件中,但它們的定義在共享對象中。將共享對象鏈接到其他共享對象C++項目
據我所知,由於頭文件中的聲明我可以編譯這段代碼。
但我不明白的是什麼時候我必須明確指定鏈接器使用的共享對象?
即如果我指定它(例如,在與target_link_libraries命令cmake的),則鏈接器可以檢查一個符號將在共享庫或沒有。但是如果我沒有指定它會發生什麼(即鏈接中沒有任何-l [shared_object_name]標誌)?我的經驗是(令我感到驚訝的)是正常工作(即整個建築過程已完成)。它怎麼可能?
一些編譯器,如Microsoft-VC有一個'#pragma',它允許你在源代碼中指定編譯器和鏈接器選項。 Boost使用它根據編譯器宏自動選擇正確的共享庫。 – rodrigo
我們在linux下使用GCC,不使用#pragma :( –