簡體   English   中英

C ++ Linux錯誤正在加載共享庫`undefined symbol:pthread_create`

[英]C++ Linux Error Loading Shared Library `undefined symbol: pthread_create`

我創建了一個可以很好地編譯所有內容的庫。 庫文件是“ libTextSearch.so”

在庫內部,它創建一個thread 我為此使用C ++ 11線程:

TextSearch::TextSearch(){
    std::thread t(&TextSearch::ThreadProc, this);
    t.detach();
}

如我所說,庫已編譯,並且我有libTextSearch.so文件。

我正在嘗試在其他應用程序中加載庫:

void* handle = dlopen("libTextSearch.so", RTLD_LAZY);
if(!handle){
    //std::cout << "\n  Failed to load libTextSearch.so\n\n";
    fprintf(stderr, "dlopen failed: %s\n", dlerror());
    return 1;
}

我已經將軟件包復制到/usr/lib 這是我得到的輸出:

dlopen failed: /usr/lib/libTextSearch.so: undefined symbol: pthread_create
RUN FINISHED; exit value 1; real time: 0ms; user: 0ms; system: 0ms

我查了這個問題 我認為這是相關的,但我不知道將其應用於我的情況。

有任何想法嗎?

我不確定,因為我不知道您如何構建此項目,也不知道libTextSearch.so的構建方式,但是在生成libTextSearch時,您需要以某種方式鏈接到libpthread。 通常,在您的構建環境中,您將提供-lpthread作為參數以動態鏈接到它。

gcc -c testsearch.cpp -lpthread -o textsearch.o 

例如

只需使用RTLD_GLOBAL預先dlopen thread

void* handlePthread = dlopen("libpthread.so.0", RTLD_GLOBAL | RTLD_LAZY);
if(!handlePthread ){
    //std::cout << "\n  Failed to load libpthread.so.0\n\n";
    fprintf(stderr, "dlopen failed: %s\n", dlerror());
    return 1;
}

暫無
暫無

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

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