共有ライブラリの関数から「コア」関数を呼び出そうとしていますが、次のようになります。
./a.out: symbol lookup error: ./libtest.so: undefined symbol: testf
私が使用しているコードは非常に基本的なものです。なぜなら、共有ライブラリを書き始めたばかりで、テスト目的のためだけだからです: main.h
extern void testf();
main.c
#include <stdio.h>
#include <dlfcn.h>
extern void testf()
{
printf("bla bla\n");
}
int main () {
void *handle = NULL;
void (*testlib)(void) = NULL;
handle = dlopen("./libtest.so" ,RTLD_LAZY);
testlib = dlsym(handle, "testfunc");
if ( testlib == NULL )
{
printf("Error: %s \n", dlerror());
}
else
{
testlib();
}
}
libtest.c
#include <stdio.h>
#include "main.h"
void testfunc() {
printf("Test plugin\n");
testf();
}
そして、私がそれをコンパイルするコマンド:
gcc -fPIC -g -c -Wall libtest.c
gcc -shared -Wl,-soname,libtest.so.1 -o libtest.so libtest.o -lc
gcc main.c -ldl
これを達成することは可能ですか?答えを見つけようとしましたが、質問を正しく形成する方法がよくわからないので、よりよく検索できます。
ありがとう!