簡體   English   中英

GCC:指定要構建的靜態/動態庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM