0

共有ライブラリの関数から「コア」関数を呼び出そうとしていますが、次のようになります。

./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

これを達成することは可能ですか?答えを見つけようとしましたが、質問を正しく形成する方法がよくわからないので、よりよく検索できます。

ありがとう!

4

2 に答える 2

0

申し訳ありませんが、答えを見つけることができました:間違ったパラメータでメインプログラムをコンパイルしていました。使用する必要があります:

gcc main.c -ldl -rdynamic
于 2013-05-10T15:14:32.893 に答える