我需要动态链接我创建的库。我不太清楚是什么问题。它都编译得很好,但我总是将handle作为NULL指针:

void *handle;
char *error;
handle = dlopen ("./hw11-lib-michaelSchilling.so", RTLD_LAZY);
//same error comes up with full path as well as './hw11...'
if(!handle){
    error = dlerror();
    printf("%s\n", error);
    printf("Error loading library.\n");
    exit(1);
}

我不能通过这个错误,我不知道可能是什么错误。我很肯定我把所有东西都编对了。以下是我使用的编译步骤:
gcc -rdynamic -c hw11-lib-michaelSchilling.c -o hw11-lib-michaelSchilling.so
gcc hw11-michaelSchilling-4.c -ldl -o hw11-michaelSchilling-4

我收到一个错误,上面写着
只能加载et-dyn和et-exec。

最佳答案

构建hw11-lib-michaelSchilling.so时,您似乎没有告诉gcc您想要共享对象(名称中的.so不够)。
使用-c它将生成一个对象文件(不是共享对象)并调用它michaelSchilling.so。链接器甚至都不会被调用。
-c命令行中删除gcc并添加-shared

gcc -shared -rdynamic hw11-lib-michaelSchilling.c -o hw11-lib-michaelSchilling.so

10-07 22:17