2014-11-04 169 views
0

這裏是我的代碼:GCC:錯誤:libhello.so:沒有這樣的文件或目錄

// hello.c 
#include<stdio.h> 

int main(int argc, char **argv) { 
    return (0); 
} 

我在終端上鍵入gcc hello.c -o -shared libhello.so並獲得:

gcc: error: libhello.so: No such file or directory 

問題:如何編譯.c文件到.so文件與一個命令行

更新:如果我用gcc hello.c -shared -o libhello.so修復它,但我只是有些困惑,爲什麼錯誤信息是「gcc:error:libhello.so:沒有這樣的文件或目錄」,而不是「gcc:error:libhello.so:沒有這樣的文件或目錄'-shared'「

+0

'gcc hello.c -o -shared libhello.so'的意思是「編譯文件'hello.c'和'libhello.so',並將結果放入文件'-shared'」。由於輸出文件將在編譯期間創建,因此編譯器不會發出缺少警告。然而,源文件的存在對於編譯成功是必要的,因此會發出錯誤消息。 – 2014-11-04 09:53:12

回答

1

順便說一句,共享庫應該包含position independent code。因此,與

gcc -Wall -fPIC -shared -O -g hello.c -o libhello.so 

見編譯它也thisthat答案。

而共享對象應該(近)從不main函數。

PS。至gcc的參數順序很重要!

+0

有關創建DLL的訂單的任何建議? – Royi 2017-10-11 22:33:33

+0

DLL是Windows特定的。您需要閱讀文檔(特別是鏈接器)。 – 2017-10-12 05:02:44

+0

假設它是通用共享庫。例如,我應該在創建o文件和共享庫時還是僅在其中一個步驟中使用優化標誌?謝謝。 – Royi 2017-10-12 09:20:21

1

輸出文件的名稱必須直接跟在-o之後。試試這個:

gcc hello.c -shared -o libhello.so 
0

我不知道你爲什麼這麼做。但也許gcc hello.c -shared -o libhello.so

相關問題