SEGFAULT:C

时间:2017-05-03 01:25:07

标签: c segmentation-fault dynamic-library

我正在尝试创建一个Makefile,它将使用我的共享库lib-selena.so编译和链接主文件selena-4.c.主文件使用dlopen动态使用共享库。

(对于上下文:我们的家庭作业是做一个以前的作业,我们必须创建一个程序,创建一个链接列表,其节点数与用户输入的命令行相同,然后将其分开到最后一步:创建一个新的主文件:selena-4.c& use dlopen来动态打开我们创建的共享库上一步。)

(顺便说一下,我已经完成了我的任务,但我想知道我哪里出错了,以便我在决赛中表现出色,明天也是如此。)

当我运行makefile时,收到以下消息: lib-selena.so:cannot open共享对象文件:没有这样的文件或目录 分段错误(核心转储)

这是我的主要文件:

#include "selena-4.h"
#include <dlfcn.h>

int main(int argc, char **argv)
{
    void *tempHandle;

    tempHandle = dlopen("lib-selena.so", RTLD_LAZY);
    if(!tempHandle) printf("%s\n", dlerror());

    int (*mainOne) (int argc, char **argv); 
    int (*mainTwo) (char **argv);
    int (*mainThree) (void);
    int (*mainFour) (void); 

    mainOne = dlsym(tempHandle, "main1");
    mainTwo = dlsym(tempHandle, "main2");
    mainThree = dlsym(tempHandle, "main3");
    mainFour = dlsym(tempHandle, "main4");

    mainOne(argc, &*argv);
    mainTwo(&*argv);
    mainThree();
    mainFour();

    dlclose(tempHandle);
    return 0;
}

这是我的主文件的头文件:

#define _GNU_SOURCE
#define _DEFAULT_SOURCE

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


//This global struct acts as a 'node' with pointers to preceding and following 
nodes, in addition to a unique number (the data field).
struct node
{
    int data;
    struct node *next;
    struct node *prev;

};

typedef struct node _node; //our node struct will be referred to as '_node' 
from now on

extern _node *head;
extern _node *tail; 
extern _node *trashHead;
extern _node *trashTail;

int main(int argc, char **argv);

这是我的Makefile:

all: hw11FOUR

COMP = gcc
CFLAGS = -fPIC -c -Wall 


hw11FOUR: selena-4.o 
    gcc -o hw11FOUR selena-4.o -ldl

selena-4.o: selena-4.c  
    $(COMP) $(CFLAGS) selena-4.c 

这是我用来创建共享库的Makefile:

all: hw11THREE
COMP = gcc
CFLAGS = -fPIC -c -Wall 


hw11THREE: selena-main.o lib-selena.so
    gcc -o hw11THREE selena-main.o -lm ./lib-selena.so

selena-main.o: selena-main.c  selena-main.h
    $(COMP) $(CFLAGS) selena-main.c 

selena-A.o: selena-A.c selena-A.h
    $(COMP) $(CFLAGS) selena-A.c

selena-B.o: selena-B.c selena-B.h
    $(COMP) $(CFLAGS) selena-B.c

selena-C.o: selena-C.c selena-C.h
    $(COMP) $(CFLAGS) selena-C.c

selena-D.o: selena-D.c selena-D.h
    $(COMP) $(CFLAGS) selena-D.c

lib-selena.so: selena-A.o selena-B.o selena-C.o selena-D.o 
    gcc -shared -o lib-selena.so selena-A.o selena-B.o selena-C.o selena-D.o

我非常感谢你们能给我的任何帮助!谢谢!

编辑:原始MAKEFILE     全部:hw11FOUR

COMP = gcc
CFLAGS = -fPIC -c -Wall 


hw11FOUR: selena-4.o lib-selena.so
    gcc -o hw11FOUR selena-4.o -lm ./lib-selena.so -ldl

selena-4.o: selena-4.c  
    $(COMP) $(CFLAGS) selena-4.c 

lib-selena.so: selena-4.o 
    gcc -shared -o lib-selena.so selena-4.o 

0 个答案:

没有答案