編輯發現了一個問題,但它仍然需要解決它應該在下面的答案 我的任務是編寫基於現有文件的應用程序。 test.c(main)randapi.c randapi.h(這裏有兩個函數)和initapi.c(一個函數)。 「你怎麼能使用動態庫作爲動態加載庫。使用eg9(我做了一個動態庫,它工作正常)寫應用程序,這個庫將附加動態」動態庫動態附加
這裏是我嘗試一個makefile,但終端說即:未能打開我來的時候使用./program
我曾嘗試也版本運行文件,無需安裝initapi.c但隨後說initRand是未知的,除了使文件清楚地附着其
#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
#define ITERATIONS 1000000L
int main(int argc, char** argv)
{
long i;
long isum;
float fsum;
void *lib;
lib=dlopen("librandapi.so", RTLD_LAZY);
if (!lib)
{
printf("failed to open");
exit(1);
}
int (*getRand)(int);
float (*getSRand)();
void (*initRand)();
getRand=dlsym(lib,"getRand");
getSRand=dlsym(lib,"getSRand");
initRand=dlsym(lib,"initRand");
initRand();
isum = 0L;
for (i = 0 ; i < ITERATIONS ; i++) {
isum += ((*getRand)(10));
}
printf("getRand() Average %d\n", (int)(isum/ITERATIONS));
fsum = 0.0;
for (i = 0 ; i < ITERATIONS ; i++) {
fsum += ((*getSRand)());
}
printf("getSRand() Average %f\n", (fsum/(float)ITERATIONS));
dlclose(lib);
return 0;
}
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
makefile
zad9: test.c
gcc -Wall -o zad9 test.c -ldl
librandapi.so: randapi.o initapi.o
gcc -shared -o librandapi.so randapi.o initapi.o
randapi.o: randapi.c randapi.h
gcc -c -Wall -fPIC randapi.c
initapi.o: initapi.c
gcc -c -Wall -fPIC initapi.c
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
zad9: test.c initapi.c
gcc -Wall -o zad9 test.c initapi.c -ldl
librandapi.so: randapi.o initapi.o
gcc -shared -o librandapi.so randapi.o
randapi.o: randapi.c randapi.h
gcc -c -Wall -fPIC randapi.c
什麼在'errno',價值preferrably用'字符串錯誤翻譯()',後'dlopen的()'? –