2017-03-06 14 views
0
+-CMakeLists.txt 
| 
+---Dir1 
    |- source_file1.c 
    |- CMakeLists.txt 
+---Dir2 
    |- source_file2.c 
    |- CMakeLists.txt 
+---Dir3 
    |- header_file.h 

我有使用cmake解決以.so未定義的符號在報頭中定義的

abc.so創建一個共享庫

這圖書館2點未定義的名稱:

U do_something1 
U do_something2 

這兩者都是在Headerfile.h中的一個不同的目錄中定義。該文件是source_file1.c和source_file2.c的SOURCE_FILE的一部分。

但是,我無法獲得在庫中解析的未定義符號!這是超級奇怪的。我究竟做錯了什麼?

代碼是用-fPIC -rdynamic編譯的。 出於某種原因--Wl - 導出所有符號出現在編譯器無法識別的位置。編譯器是gcc 5.4.0

+1

'這兩者在Headerfile.h'定義 - * *動態符號在**頭很少定義* *文件。如果函數在頭文件中被定義*,它通常使用'static inline'說明符。那麼,通過在'header_file.h'中定義符號是什麼意思? – Tsyvarev

+0

這兩個函數是內聯函數。我發現所有其他非內聯函數都是在.so中定義的。我如何解決它?我不想讓他們內聯。會添加靜態內聯說明符修復它嗎? – theCuriousOne

+0

我有點刪除了內聯函數,現在用代碼直接替換它。所以不能立即嘗試。 – theCuriousOne

回答

0

a。將內聯函數聲明爲靜態解決了問題。 b。如果C文件包括與靜態連續頭,其足夠

感謝(@Tsyvarev)