Я пытаюсь выполнить динамическую загрузку с помощью C, и я столкнулся с проблемой в самом начале. У меня есть небольшая программа, которая загружает объект во время выполнения. Объект содержит единственную функцию, которая записывает некоторые сообщения в stdin. Это было составлено на OS X 10.10 с clang. Вот код:C Динамический файл загрузки слишком короткий?
/* loader.c */
#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>
#include "module.h"
int main(int argc, char **argv) {
char file[] = "https://stackoverflow.com/users/user/dev/module.o";
void *handle;
int (*function)();
handle = dlopen(file, RTLD_NOW);
if (!handle) {
printf("Cannot load program. Error: %s\n", dlerror());
return 1;
}
program = dlsym(handle, "function");
printf("Program loaded");
function();
printf("Exiting");
return 0;
}
Здесь module.h:
/* module.h */
int
function();
Вот module.c:
/* module.c */
#include <stdio.h>
#include <unistd.h>
int function() {
printf("Hello from module");
sleep(1);
printf("Hello from module again");
return 0;
}
Вот это Makefile:
loader : loader.c module.o
cc -Wall loader.c -ldl -o loader
module.o : module.c
cc -Wall -fpic -c module.c
Это компилируется без предупреждений, но это не выполняется Я жду. Программа возвращает следующую ошибку:
Error: dlopen(/users/user/dev/module.o, 2): no suitable image found. Did find: /users/user/dev/module.o: file too short
.
У меня был взгляд, и в этом сообщении об ошибке не так много. Эта программа была основана на примере dlopen
от TLDP. Означает ли это, что файлы должны быть определенного размера для динамической загрузки или что-то не так с тем, как эти файлы были скомпилированы?
Я чувствую, что мне не хватает чего-то простого.
Как получить эту программу для выполнения, как ожидалось?