Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SEGFAULT:C中动态库的Makefile_C_Segmentation Fault_Dynamic Library - Fatal编程技术网

SEGFAULT:C中动态库的Makefile

SEGFAULT:C中动态库的Makefile,c,segmentation-fault,dynamic-library,C,Segmentation Fault,Dynamic Library,我正在尝试创建一个Makefile,它将编译并链接一个主文件selena-4.c和我的共享库lib-selena.so。主文件使用dlopen动态使用共享库 (上下文:我们的家庭作业是上一个家庭作业,其中我们必须创建一个程序,创建一个节点数与用户输入的命令行相同的链表,并将其划分为不同的文件(带有头文件)练习创建共享库和静态库(&p)。这是最后一步:创建新的主文件:selena-4.c&使用dlopen动态打开我们在上一步中创建的共享库。) (顺便说一句,我已经交了作业,但我想知道我哪里做错了,

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

(上下文:我们的家庭作业是上一个家庭作业,其中我们必须创建一个程序,创建一个节点数与用户输入的命令行相同的链表,并将其划分为不同的文件(带有头文件)练习创建共享库和静态库(&p)。这是最后一步:创建新的主文件:selena-4.c&使用dlopen动态打开我们在上一步中创建的共享库。)

(顺便说一句,我已经交了作业,但我想知道我哪里做错了,这样我就能在明天的期末考试中取得好成绩。)

当我运行makefile时,我收到以下消息: lib selena.so:无法打开共享对象文件:没有此类文件或目录 分段故障(堆芯转储)

这是我的主要文件:

#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: 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
我非常感谢你们能给我的任何帮助!谢谢大家!

编辑:原始生成文件 全部: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 

如何“运行”Makefile?
lib selena.so
在哪里,您的
LD\u LIBRARY\u路径是什么(首先,我想我们应该询问哪个平台)?如果我使用了不正确的术语,很抱歉。对您的问题的回答:(1)make-f Makefile4(2)它是在我运行另一个makefile时创建的,通过键入make-f Makefile3(3)我不确定--我如何才能找到它?(4) 你说的站台是什么意思?我在linux上这么做-这就是你的意思吗?你在哪里把你的可执行文件链接到
lib selena.so
;您只能链接到
dl
库。顺便说一句,
lib selena
是个坏名字,因为链接器命令中的库名变成了
-selena
,可能是转义了
-
libselena。因此
是一个更好的名称。此外,您可能不希望在头文件中声明
main
。我从来没有见过这样做,也许它并不痛,但它确实非常罕见。哦,所以即使我使用dlopen,我仍然需要这样做?这就是我对原始makefile所做的,但我更改了它,因为我认为我做错了什么。这是我的原始makefile:
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