我正在尝试创建一个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