неопределенная ссылка на dlopen - PullRequest
0 голосов
/ 24 января 2020

У меня есть одна C программа, которую я хочу загрузить в мою работающую C программу. Ниже приведен фрагмент

Файл: a. c

    #include <stdio.h>

    void abc() { 
      printf("This is abc\n"); 
    }

Файл: mainFile. cpp

    #include<stdio.h>
    #include <dlfcn.h>

    int main(int argc, char **argv) {

      void *lib = dlopen("./a.so", RTLD_LAZY);
       if (!lib) {
         printf("dlopen failed: %s\n", dlerror());
         return 1;
      }
      void (*f)() = dlsym(lib, "abc");
      if (f) {
          f();
      } else {
          printf("dlsym for f1 failed: %s\n", dlerror());
      }

      dlclose(lib);
      return 0;
    }

Я компилирую с помощью следующих команд

    gcc -fpic -g -shared -ldl -o a.so a.c
    g++ -w mainFile.cpp -o mainFile

Вывод:

/tmp/cc9fYZaf.o: In function `main':
mainFile.cpp:(.text+0x1a): undefined reference to `dlopen'
collect2: error: ld returned 1 exit status

Я компилирую в Ubuntu 16.04 с g cc версия g cc (Ubuntu 5.4 .0-6ubuntu1 ~ 16.04.12) 5.4.0 20160609

Пожалуйста, помогите

Примечание: я следовал по следующим ссылкам, но ни одна не помогла.

  1. Можете ли вы динамически скомпилировать и связать / загрузить C код в программу C?
  2. неопределенная ссылка на `dlopen 'с момента обновления Ubuntu
  3. неопределенная ссылка на `dlopen '

1 Ответ

4 голосов
/ 24 января 2020

Вторая строка - та, которая связывает исполняемый файл - нуждается в -ldl, а не в первой:

g++ -w mainFile.cpp -ldl -o mainFile
...