2013-01-09 41 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