簡體   English   中英

對 dlopen 的未定義引用

[英]undefined reference to dlopen

我有一個 C 程序,我想將它加載到我正在運行的 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 中使用 gcc 版本 gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609 進行編譯

請幫忙

注意:我遵循了以下參考資料,但沒有任何幫助。

  1. 您可以動態編譯 C 代碼並將其鏈接/加載到 C 程序中嗎?
  2. 自 ubuntu 升級以來未定義對“dlopen”的引用
  3. 對`dlopen'的未定義引用

第二行——鏈接可執行文件的行——需要-ldl ,而不是第一行:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM