2013-01-09 42 views
1

程序啓動時是否可能發生分段錯誤(即程序中沒有運行一行代碼),但可能是因爲它正在加載?啓動時出現分段錯誤 - C?

我有以下生成文件

OBJS = one.o two.o 
prog: prog.o $(OBJS) libtreader.so 
    ${CC} -o [email protected] ${CFLAGS} ${EXTRACFLAGS} -L. -lssl -ltreader prog.o $(OBJS) -shared 

我從一個shell腳本運行的程序

path/prog 

的聲明之後的第一條語句是一個printf語句。但唯一打印的是:分段錯誤

所以我可能在打印時遇到問題或加載程序時出現問題。任何建議真的很感激。

編輯: 這是最主要的方法

int main(int argc, char *argv[]) 
{ 
int err; 
struct parse_params params; 
int c; 
int index; 

    printf("SSSSS\n"); 

EDIT2:我期待在這裏的正確的文件:prog.c中?或主要的方法可以在另一個文件?

+0

將調用添加到'printf()'。似乎你對那裏的指針有一個錯誤的假設。 – 2013-01-09 20:18:52

+0

也許你沒有看到'printf'輸出由於緩衝?在'printf'後面顯示'fflush(stdout);'顯示什麼? –

+0

首先嚐試在調試器中運行它看看它在哪裏核心 – 2013-01-09 20:21:00

回答

1

將您的-shared參數移除到gcc。這是爲了創建一個共享庫(它也是一個可執行文件,但是當你嘗試運行時會崩潰)。

+0

問題:如果它使用共享庫,基本上是其他庫,它不會編譯。那麼如何在不使用-shared – user1253073

+0

的情況下使用其他共享庫進行編譯?我不知道,您需要告訴我們您遇到的錯誤。您當前的makefile生成共享庫,這是錯誤的。你需要創建一個常規的可執行文件,當你刪除'-shared'標誌時你會這樣做。如果通過這樣做讓其他人發生錯誤,那是一個不同的問題,您需要詳細告訴我們有關該錯誤的信息。 – nos

+0

是的,我有一些重大問題,但我可以解決它們。對於原來的問題,儘管你的回答基本上解釋了爲什麼我認爲事後認識是有道理的。它是一個共享庫,我想我不能運行它。再次感謝。 – user1253073