[英]GCC: Specifying static/dynamic libraries to build against
我有一個簡單的C ++項目,其結構如下:-一個基礎項目(即:包含main()),並鏈接到其他所有內容-一些自定義庫全部構建為靜態庫(即.a文件) ---這些靜態庫之一使用共享目標文件(即:.so文件)中的功能
因此,例如,這是所有初始編譯完成后,項目在鏈接時(在樹狀視圖中)的顯示方式:
-myApp (the main application)
--libaudio.a (the audio library I made)
--libnetwork.a (the networking library I made)
--libvideo.a (the video library I made)
--libboost.a (boost library)
最初,此項目構建良好。 我只需要確保我的makefile中有一條簡單的行,如下所示:
LIBS+=audio network video
最近,我不得不更改音頻庫的工作方式。 現在,我需要使用第三方庫,而我所擁有的只是頭文件(.h)和共享對象(.so)文件。 因此,鏈接時的新結構如下所示:
-myApp (the main application)
--libaudio.a (the audio library I made)
---libthirdparty.so (contains third-party audio handling functions)
--libnetwork.a (the networking library I made)
--libvideo.a (the video library I made)
--libboost.a (boost library)
實際上,這意味着我有一個鏈接了靜態庫的應用程序,在其中調用外部共享庫。 因此,我將頭文件放在適當的位置,以便編譯libaudio.a時沒有任何構建錯誤,並將libthirdparty.so文件放在鏈接器搜索我所有已安裝庫的位置。
在這一點上,我無法建立東西。 即使我知道它位於鏈接器默認搜索的位置,它也看不到libthirdparty.so文件。 由於某些原因,包裝我的libaudio代碼,如以下示例(從www.cplusplus.com借用)中所示,可以修復生成錯誤:
my_C_CPP_Header.h:
#ifndef MY_C_CPP_HEADER
#define MY_C_CPP_HEADER
/*check if the compiler is of C++*/
#ifdef __cplusplus
extern "C" {
int myOtherCfunc(int arg1, int arg2); /* a C function */
}
#endif
void myCppFunction1(); /* C++ function */
void myCppFunction2(); /* C++ function */
/*check if the compiler is of C++ */
#ifdef __cplusplus
}
#endif
#endif
現在,我有一個新問題。 現在它正在構建,它不再在libboost.a中靜態鏈接,而是由於libboost.so不存在而在啟動時崩潰。 因此,如果我設法完全構建它,那么此設置將以某種方式破壞libboost的編譯方式。
歡迎任何建議。 謝謝大家。
最后,有一個“ LIBPATH =”而不是“ LIBPATH + =”語句覆蓋了庫的包含路徑。 解決。
謝謝大家的幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.