[英]CMake undefined symbol: pthread_create compiling dynamic library
[英]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.